HTTP-сервер на Freepascal

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

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

HTTP-сервер на Freepascal

Сообщение Replicator » 05.06.2006 15:37:18

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

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

Исходник годится как пример работы с сокетами, с потоками. Также там реализован кроссплатформенный заменитель пайпов.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение PVOzerski » 06.06.2006 09:42:55

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

Сообщение Replicator » 06.06.2006 15:51:40

Рад стараться =) Кстати, если какие баги - сообщайте.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение cranium » 07.06.2006 06:06:17

Несколько вопросов:
1) режим службы/демона не предусмотрен?
2) планируется ли дальнейшее развитие, если да будет ли более тонкая настройка виртуальных хостов, поддержка php ну и т.д.
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Re: HTTP-сервер на Freepascal

Сообщение bara-igor » 07.06.2006 09:30:03

Replicator писал(а):Написал HTTP-сервер на Freepascal. Кому интересно: http://zero.kanet.ru/files/?page=/nYume_Server.
Мне понравилось. Давайте дружить семьями!
bara-igor
новенький
 
Сообщения: 63
Зарегистрирован: 04.03.2006 10:09:54

Сообщение Replicator » 07.06.2006 17:09:33

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

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

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

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

Сообщение cranium » 07.06.2006 17:19:43

1) Пока нет.

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

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

ну пока все:)
p.s. аппетит приходит во время еды:D
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение Replicator » 07.06.2006 17:37:11

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

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

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

P.S. Только сейчас придумал способ - демон прослушивает какой- нибудь порт на localhost'е, а завершающее приложение просто посылает в соответствующий сокет команду STOP и само завершается.
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение cranium » 07.06.2006 17:57:32

Не мудурствуй лукаво;) Вот это читал?
http://www.delphimaster.ru/articles/kylix3/index.html
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение Replicator » 07.06.2006 19:46:18

Это все хорошо. Так и надо делать если имеешь дело только с Linux. Но мне нужен кросплатформенный способ, так что это не подходит. Ключевые слова в сообщении выше:
как это сделать независимо от ОС?
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение cranium » 07.06.2006 20:26:54

Ни как это не сделать не зависимо от os слишком оси разные:D
Вот для сравнения http://www.codenet.ru/progr/delphi/stat/services.php
так что только условная компиляция...
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение Replicator » 08.06.2006 13:58:20

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


Да, вот интересный момент. Если я буду создавать новый процесс при подключении, то мне надо передавать туда идентификатор сокета. Так вот, это идентификатор можно так вот просто передать? Он имеет значение для системы или только для конкретного процесса?
Replicator
постоялец
 
Сообщения: 154
Зарегистрирован: 30.04.2006 17:14:45
Откуда: Outer Heaven

Сообщение cranium » 08.06.2006 15:11:32

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

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

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

Вариант через pid (индетификатор процесса) вполне может быть кросс платформенным
cranium
постоялец
 
Сообщения: 143
Зарегистрирован: 08.05.2005 03:59:45
Откуда: Санкт-Петербург

Сообщение SergKam » 08.06.2006 17:51:35

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

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

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

представь как будет матюкатся админ когда по killall -TERM server ничего не произойдет
или в винде при нажатии кнопки остановить службу будет вылазить сообщение об ошибке.
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение Replicator » 08.06.2006 19:13:52

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

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

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

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

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

След.

Вернуться в Разное

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru