HTTP-сервер на Freepascal

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

HTTP-сервер на Freepascal

Сообщение Replicator »

Написал HTTP-сервер на Freepascal. Кому интересно: http://zero.kanet.ru/files/?page=/nYume_Server.

Сервер многопоточный, позволяет запускать CGI-приложения, позволяет на 1м ip держать несколько сайтов, поддерживает доменные имена сайтов. Использованы только стандартные библиотеки, поэтому сервер получился маленьким и кроссплатформенным.

Исходник годится как пример работы с сокетами, с потоками. Также там реализован кроссплатформенный заменитель пайпов.
PVOzerski
постоялец
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб
Контактная информация:

Сообщение PVOzerski »

Это приятная новость, давно искал сабж под Linux. Кстати, для Win32 есть простенький TinyWeb от фирмы RIT Labs (той, что сделала The Bat! и DN), написанный на Delphi и распространяемый бесплатно с исходниками. Перекомпилируется в работоспособный exe с помощью FPC после одного дополнительного приведения типов. Естественно, ни о какой кросс-платформенности там речи нет, так что большое спасибо за программу!
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

Рад стараться =) Кстати, если какие баги - сообщайте.
cranium
постоялец
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение cranium »

Несколько вопросов:
1) режим службы/демона не предусмотрен?
2) планируется ли дальнейшее развитие, если да будет ли более тонкая настройка виртуальных хостов, поддержка php ну и т.д.
bara-igor
новенький
Сообщения: 63
Зарегистрирован: 04.03.2006 09:09:54

Сообщение bara-igor »

Replicator писал(а):Написал HTTP-сервер на Freepascal. Кому интересно: http://zero.kanet.ru/files/?page=/nYume_Server.
Мне понравилось. Давайте дружить семьями!
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

cranium писал(а):Несколько вопросов:
1) режим службы/демона не предусмотрен?
2) планируется ли дальнейшее развитие, если да будет ли более тонкая настройка виртуальных хостов, поддержка php ну и т.д.

1) Пока нет.
2) Да. Кстати, что за более тонкая настройка? Что конкретно надо? Предложения приветствуются.

Мне понравилось. Давайте дружить семьями!

Давайте :mrgreen:
cranium
постоялец
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение cranium »

1) Пока нет.

Без этого к сожалению практического применения быть не может....
2) Да. Кстати, что за более тонкая настройка? Что конкретно надо? Предложения приветствуются.

1) режим демона/службы
2) раздельный логи по каждому виртуальному хосту
3) в исходники я не заглядывал, то так понял что на каждое соединение свой поток, хотелосьбы отдельный процесс запускаемый от имени пользователя которому пренадлежит виртуальный хост (так безопаснее)

ну пока все:)
p.s. аппетит приходит во время еды:D
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

Хм, отдельный процесс - это интересно. Обязательно сделаю.
Раздельные логи тоже будут.

Насчет демона. Я сначала так и хотел, но возникают проблемы. Точнее одна проблема - как выключить сервер? Если просто завершить процесс, что я сначала и хотел, то под Linux не освобождается сокет.

Отсюда вопрос, как завершить приложение, если у него нет консоли? Очевидно, нужно послать ему сигнал, но как это сделать независимо от ОС?

P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
cranium
постоялец
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение cranium »

Не мудурствуй лукаво;) Вот это читал?
http://www.delphimaster.ru/articles/kylix3/index.html
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

Это все хорошо. Так и надо делать если имеешь дело только с Linux. Но мне нужен кросплатформенный способ, так что это не подходит. Ключевые слова в сообщении выше:
как это сделать независимо от ОС?
cranium
постоялец
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение cranium »

Ни как это не сделать не зависимо от os слишком оси разные:D
Вот для сравнения http://www.codenet.ru/progr/delphi/stat/services.php
так что только условная компиляция...
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

И все же, как насчет
демон прослушивает какой - нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.


Да, вот интересный момент. Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета. Так вот, это идентификатор можно так вот просто передать? Он имеет значение для системы или только для конкретного процесса?
cranium
постоялец
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение cranium »

Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета

Если речь о *nix то ни чего передовать не надо после вызова fork процесс с установленным соединением остается и все идентификаторы то же, в NT для этого есть clone....

P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.

Вариант через pid (индетификатор процесса) вполне может быть кросс платформенным
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

Очень нужная штука.
Я еще не посмотрел, но уже предложения есть :)
Я долго искал такое, но мне нужно чтобы сервер был легким без наворотов
комуто нужен со всеми наворотами, поэтому надо какиенибудь ключи компиляции
предусмотреть
Желательно еще поддержка вкомпиленых статических модулей(или so,dll)
(мне нужно для мини сервера-роутера систему удаленного управления-контроля сваять)

И вот теперь на его основе делаем прокси сервер
затем почтовик
и имеем полноценный WinGate аналог на одном linux ядре и этой проге ВСЕ!!!
Я обязательно подключюсь как разгребу на работе.

насчет сигналов
Условная компиляция намного лучше и проще чем такое извращение с сокетами.
в *nix все нормальные сервера выключаются сигналами, в винде сообщениями.
если программа работает в какойто среде она должна подчинятся правилам этой среды

представь как будет матюкатся админ когда по killall -TERM server ничего не произойдет
или в винде при нажатии кнопки остановить службу будет вылазить сообщение об ошибке.
Replicator
постоялец
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven
Контактная информация:

Сообщение Replicator »

Как раз таки в винде все нормально. Там можно просто завершить процесс. А вот с линуксом проблемы, чего я не ожидал.

Если делать с условной компиляцией и пр., то можно потерять кроссплатформенность. Сейчас сервер может работать не только в Вин или Линукс, но и в FreeBSD, в MacOS, да и вообще в любой ОС, в которой его скомпилируют. Единственное, пайпы, но я уже знаю что делать - TProcess. Так что никаких системозависимых решений не будет, их и так уже много, от них надо избавляться.

Задача-то не в том, чтобы заменить гигант Апач. Задача в том, чтобы сделать маленький и простенький кроссплатформенный сервер с поддержкой CGI. Разумеется, сервер должен быть полноценным для содержания сайта и безопасным.

Если речь о *nix то ни чего передовать не надо после вызова fork процесс с установленным соединением остается и все идентификаторы то же, в NT для этого есть clone....

А другие ОС? Опять платформеннозависимое решение получается...
Ответить