HTTP-сервер на Freepascal
Модератор: Модераторы
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
HTTP-сервер на Freepascal
Написал HTTP-сервер на Freepascal. Кому интересно: http://zero.kanet.ru/files/?page=/nYume_Server.
Сервер многопоточный, позволяет запускать CGI-приложения, позволяет на 1м ip держать несколько сайтов, поддерживает доменные имена сайтов. Использованы только стандартные библиотеки, поэтому сервер получился маленьким и кроссплатформенным.
Исходник годится как пример работы с сокетами, с потоками. Также там реализован кроссплатформенный заменитель пайпов.
Сервер многопоточный, позволяет запускать CGI-приложения, позволяет на 1м ip держать несколько сайтов, поддерживает доменные имена сайтов. Использованы только стандартные библиотеки, поэтому сервер получился маленьким и кроссплатформенным.
Исходник годится как пример работы с сокетами, с потоками. Также там реализован кроссплатформенный заменитель пайпов.
-
PVOzerski
- постоялец
- Сообщения: 109
- Зарегистрирован: 19.05.2005 13:45:10
- Откуда: СПб
- Контактная информация:
Это приятная новость, давно искал сабж под Linux. Кстати, для Win32 есть простенький TinyWeb от фирмы RIT Labs (той, что сделала The Bat! и DN), написанный на Delphi и распространяемый бесплатно с исходниками. Перекомпилируется в работоспособный exe с помощью FPC после одного дополнительного приведения типов. Естественно, ни о какой кросс-платформенности там речи нет, так что большое спасибо за программу!
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
Мне понравилось. Давайте дружить семьями!Replicator писал(а):Написал HTTP-сервер на Freepascal. Кому интересно: http://zero.kanet.ru/files/?page=/nYume_Server.
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
cranium писал(а):Несколько вопросов:
1) режим службы/демона не предусмотрен?
2) планируется ли дальнейшее развитие, если да будет ли более тонкая настройка виртуальных хостов, поддержка php ну и т.д.
1) Пока нет.
2) Да. Кстати, что за более тонкая настройка? Что конкретно надо? Предложения приветствуются.
Мне понравилось. Давайте дружить семьями!
Давайте
1) Пока нет.
Без этого к сожалению практического применения быть не может....
2) Да. Кстати, что за более тонкая настройка? Что конкретно надо? Предложения приветствуются.
1) режим демона/службы
2) раздельный логи по каждому виртуальному хосту
3) в исходники я не заглядывал, то так понял что на каждое соединение свой поток, хотелосьбы отдельный процесс запускаемый от имени пользователя которому пренадлежит виртуальный хост (так безопаснее)
ну пока все:)
p.s. аппетит приходит во время еды:D
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
Хм, отдельный процесс - это интересно. Обязательно сделаю.
Раздельные логи тоже будут.
Насчет демона. Я сначала так и хотел, но возникают проблемы. Точнее одна проблема - как выключить сервер? Если просто завершить процесс, что я сначала и хотел, то под Linux не освобождается сокет.
Отсюда вопрос, как завершить приложение, если у него нет консоли? Очевидно, нужно послать ему сигнал, но как это сделать независимо от ОС?
P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
Раздельные логи тоже будут.
Насчет демона. Я сначала так и хотел, но возникают проблемы. Точнее одна проблема - как выключить сервер? Если просто завершить процесс, что я сначала и хотел, то под Linux не освобождается сокет.
Отсюда вопрос, как завершить приложение, если у него нет консоли? Очевидно, нужно послать ему сигнал, но как это сделать независимо от ОС?
P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
Не мудурствуй лукаво;) Вот это читал?
http://www.delphimaster.ru/articles/kylix3/index.html
http://www.delphimaster.ru/articles/kylix3/index.html
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
Ни как это не сделать не зависимо от os слишком оси разные:D
Вот для сравнения http://www.codenet.ru/progr/delphi/stat/services.php
так что только условная компиляция...
Вот для сравнения http://www.codenet.ru/progr/delphi/stat/services.php
так что только условная компиляция...
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
И все же, как насчет
Да, вот интересный момент. Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета. Так вот, это идентификатор можно так вот просто передать? Он имеет значение для системы или только для конкретного процесса?
демон прослушивает какой - нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
Да, вот интересный момент. Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета. Так вот, это идентификатор можно так вот просто передать? Он имеет значение для системы или только для конкретного процесса?
Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета
Если речь о *nix то ни чего передовать не надо после вызова fork процесс с установленным соединением остается и все идентификаторы то же, в NT для этого есть clone....
P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
Вариант через pid (индетификатор процесса) вполне может быть кросс платформенным
Очень нужная штука.
Я еще не посмотрел, но уже предложения есть
Я долго искал такое, но мне нужно чтобы сервер был легким без наворотов
комуто нужен со всеми наворотами, поэтому надо какиенибудь ключи компиляции
предусмотреть
Желательно еще поддержка вкомпиленых статических модулей(или so,dll)
(мне нужно для мини сервера-роутера систему удаленного управления-контроля сваять)
И вот теперь на его основе делаем прокси сервер
затем почтовик
и имеем полноценный WinGate аналог на одном linux ядре и этой проге ВСЕ!!!
Я обязательно подключюсь как разгребу на работе.
насчет сигналов
Условная компиляция намного лучше и проще чем такое извращение с сокетами.
в *nix все нормальные сервера выключаются сигналами, в винде сообщениями.
если программа работает в какойто среде она должна подчинятся правилам этой среды
представь как будет матюкатся админ когда по killall -TERM server ничего не произойдет
или в винде при нажатии кнопки остановить службу будет вылазить сообщение об ошибке.
Я еще не посмотрел, но уже предложения есть
Я долго искал такое, но мне нужно чтобы сервер был легким без наворотов
комуто нужен со всеми наворотами, поэтому надо какиенибудь ключи компиляции
предусмотреть
Желательно еще поддержка вкомпиленых статических модулей(или so,dll)
(мне нужно для мини сервера-роутера систему удаленного управления-контроля сваять)
И вот теперь на его основе делаем прокси сервер
затем почтовик
и имеем полноценный WinGate аналог на одном linux ядре и этой проге ВСЕ!!!
Я обязательно подключюсь как разгребу на работе.
насчет сигналов
Условная компиляция намного лучше и проще чем такое извращение с сокетами.
в *nix все нормальные сервера выключаются сигналами, в винде сообщениями.
если программа работает в какойто среде она должна подчинятся правилам этой среды
представь как будет матюкатся админ когда по killall -TERM server ничего не произойдет
или в винде при нажатии кнопки остановить службу будет вылазить сообщение об ошибке.
-
Replicator
- постоялец
- Сообщения: 154
- Зарегистрирован: 30.04.2006 17:14:45
- Откуда: Outer Heaven
- Контактная информация:
Как раз таки в винде все нормально. Там можно просто завершить процесс. А вот с линуксом проблемы, чего я не ожидал.
Если делать с условной компиляцией и пр., то можно потерять кроссплатформенность. Сейчас сервер может работать не только в Вин или Линукс, но и в FreeBSD, в MacOS, да и вообще в любой ОС, в которой его скомпилируют. Единственное, пайпы, но я уже знаю что делать - TProcess. Так что никаких системозависимых решений не будет, их и так уже много, от них надо избавляться.
Задача-то не в том, чтобы заменить гигант Апач. Задача в том, чтобы сделать маленький и простенький кроссплатформенный сервер с поддержкой CGI. Разумеется, сервер должен быть полноценным для содержания сайта и безопасным.
А другие ОС? Опять платформеннозависимое решение получается...
Если делать с условной компиляцией и пр., то можно потерять кроссплатформенность. Сейчас сервер может работать не только в Вин или Линукс, но и в FreeBSD, в MacOS, да и вообще в любой ОС, в которой его скомпилируют. Единственное, пайпы, но я уже знаю что делать - TProcess. Так что никаких системозависимых решений не будет, их и так уже много, от них надо избавляться.
Задача-то не в том, чтобы заменить гигант Апач. Задача в том, чтобы сделать маленький и простенький кроссплатформенный сервер с поддержкой CGI. Разумеется, сервер должен быть полноценным для содержания сайта и безопасным.
Если речь о *nix то ни чего передовать не надо после вызова fork процесс с установленным соединением остается и все идентификаторы то же, в NT для этого есть clone....
А другие ОС? Опять платформеннозависимое решение получается...
