![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа TServerSocket c cgi [D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
Интересующийся © (2006-02-07 05:06:00)Всем доброе время суток.
Может кто знает как научвить TServerSocket работать с cgi или с dll содержащими текстовые и графические ресурсы?
P.S.
Дело в том, что мне нужно создать сервер на основе TServerSocket.
Для дольнейшей работы с этим сервером мне предусмотреть возможность работы с внешними модулями (скрипты, cgi или макроязык), неохота постоянно вмешиваться в код сервера.
Интересующийся (2006-02-11 08:03:00) [1]Возможно, я неправильно задал вопрос :((
Тогда задам его подругому
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1139633936&n=4
Digitman (2006-02-10 11:42:00) [2]
> TServerSocket
Я устал ...
TServerSocket - транспорт!!!!!
Ему, этому "транспорту" по-барабанучто передавать/принимать - то ли CGI-данные, то ли ISAPI-данные !!!!!!!!!!!!!!!!!!!!
Интересующийся (2006-02-10 09:50:00) [3]Симбиоз CGI и TServerSocket при помощи ISAPI, как?
Интересующийся (2006-02-09 17:00:00) [4]Все с TServerSocket понятно.
> Digitman © (09.02.06 12:21) [18]
> http://www.citforum.ru/nets/switche/osi.shtml
За url спасибо.
Digitman (2006-02-09 12:21:00) [5]
> Интересующийся (09.02.06 12:08) [16]
Ей-богу - ты или нерусский или одно из двух)
Тебе русским языком сказано - не трогай исходники TServerSocket ! Это генофонд !
Это исходники компонента транспортного(!!!!) уровня !
Нечего на транспортном уровне делать логике прикладного уровня !
TIdHTTPServer реализует и транспорт и прикладную надстройку над ним !
Не перемешивая, а объединяя в конечную логику !
Это то что тебе надо, если ты разницы между уровнями не ощущаешь !
И это не "сокет", понимаешь ? Это - компонент, реализующий прикладную логику HTTP-сервера, и использующий на транспортном уровне гнезда и TCP-протокол !
http://www.citforum.ru/nets/switche/osi.shtml
Интересующийся (2006-02-09 12:13:00) [6]Хотя подобную процедуру можно добавить в мой потомок TThread.
А вот что в ней делвть дальше?
Интересующийся (2006-02-09 12:08:00) [7]Если в сасом TServerSocket или в его потомках нельзя организовать работу с cgi, то какие данные нужно из него взять и в каком виде передать cgi-приложению?
P.S.
Допустим я добавляю в TServerWinSocket и TServerSocket (в своем варианте) процедуру
OnCgi(Sender: TObject; Socket: TCustomWinSocket; Cgi : String; Info: String)
Где Cgi - Cgi-приложение, a Info - параметры которы передаем cgi
Digitman (2006-02-09 12:03:00) [8]
> Я и делаю это в отдельном потоке организованного при помощи
> TThread
Ну вот и делай !
Я не вижу в этом никаких проблем.
А вот почему ты не используешь TServerClientThread, автоматически поддерживаемый компонентом TServerSocket в режиме stThreadBlocking - это для меня загадка.
Интересующийся (2006-02-09 11:43:00) [9]> Что тебе мешает с пом. компонента TServerSocket принимать строки и интерпретировать их содержимое в соответствии с HTTP?
Я и делаю это в отдельном потоке организованного при помощи TThread, но это уже становиться довольно праблемотично, да и возможно нестои решать задачу подобным образом.
Кроме того я неутверждаю что вся работа должна производиться в самом компоненте.
Варианты таковы:
1. Реализовать все обработку (неважно с чем CDI, DLL, FTP, SMTP) в или нескольких потоках (потомках TThread)
2. Дописать в TServerWinSocket нужные мне свойства (возможно и другие компоненты работающие с TServerSocket).
3. Создать свой компонент (с нуля) являющийся родительским для компонентов требуемых мне.
Digitman (2006-02-09 11:19:00) [10]
> Нет нималейшего сомнения в том, что с помощью этих компонентов
> можно легко и просто (по сравнению с другими) создать нужный
> сервер
> мне надо научить свой сервер (основанный на TServerSocket)
> научить работать с CGI И DLL
Опять ты никак не поймешь, что TServerSocket - это только транспорт! Его задача - гонять туда-сюда данные произвольного типа и назначения. В том числе и произвольные данные строкового типа. На которых, к примеру, базируется тот же HTTP.
Что тебе мешает с пом. компонента TServerSocket принимать строки и интерпретировать их содержимое в соответствии с HTTP ?
Интересующийся (2006-02-09 10:58:00) [11]> Используй соответственно TIdHTTPServer, TIdFTPServer, TIdSMTPServer из состава Indy.
Нет нималейшего сомнения в том, что с помощью этих компонентов можно легко и просто (по сравнению с другими) создать нужный сервер.
Да и примеров подобной работы в нете и литературе придостаточно.
Но мне надо научить свой сервер (основанный на TServerSocket) научить работать с CGI И DLL.
P.S.
Потдробней в Интересующийся (09.02.06 05:55) [9]
Я вижу два пути:
1. Добавлять нужные мне вещив потомок TThread (который вызывается для обработки)
2. Изменить логику самого TServerSocketи всех сопутствующих ему компонентов (Что впринципе считаю возможно, но приведет к большому гемору мозга).
Digitman (2006-02-09 09:38:00) [12]
> HTTP, FTP, SMTP
Используй соответственно TIdHTTPServer, TIdFTPServer, TIdSMTPServer из состава Indy.
Эти компоненты совмещают с себе транспортный и прикладной уровни.
Digitman (2006-02-09 08:16:00) [13]
> При каких протоколах нужен блокированный сокет?
Ни при каких.
Режим работы гнезда (блокирующий или неблокирующий) не имеет ни малейшего отношения к прикладным протоколам (HTTP, FTP, SMTP).
Интересующийся (2006-02-09 05:55:00) [14]Описываю задучу, верней задачи:
1. Сервер на основе этого компонента (основной компонент с которым я работаю в сети).
Сервер должен уметь:
а. Обрабатывать статические страницы (xtml и xtm)
б. Работать с динамическими страницвами, по возможности asp и php (возможно присутствие своего макроязыка)
в. работать с cgi и dll, имеет смысл разобрать все варианты (стандартная раюота с cgi, работа с dll имеющие ресурсы и др. варианты)
г. сервер должен иметь возможность вести станистику и создовать различные отчеты
д. Сервер должен уметь работать с куками и проводить авторизацию пользователя (с помощью TServerSocket или других компонентов, неважно)
е. Сервер должет быть многопоточен
2. Создать группу компонекнтов на снове (TServerSocket), или определить основные способы при которых сокет будет уметь работать по следующим протоколам HTTP, FTP, SMTP и возможно другими.
P.S.
Интересует вопрос:
При каких протоколах нужен блокированный сокет?
Интересующийся (2006-02-09 05:38:00) [15]Приношу извинения за неточную формулировку вопроса.
Мне неважно как будет организовано взаимодействие с cgi и dll, лишь бы все это работало! :)
Digitman © (07.02.06 09:50) [7]
>Вряд ли.
>Вот цитата:
Имелся ввиду мой сервер, а некомпонент.
Хотя еесли есть возможность переписать (дописать) компонент так, чтобы он обрабатывал автаризацию, куки и работу с cgi я готов вмешаться в его исходный код!
P.S.
Опыт работы по созданию компонентов и их изменению есть, есть и иидеи, но хотелось бы сделать все правильно.
Digitman (2006-02-07 09:50:00) [16]
> Может он просто неправильно использовал термин?
Вряд ли.
Вот цитата:
> вмешиваться в код сервера
это и есть "научить".
Личность (2006-02-07 09:48:00) [17]Может он просто неправильно использовал термин? А если все же подразумевать "научить", то тут вы само сабой правы :)
Digitman (2006-02-07 09:45:00) [18]
> и где здесь ответ почему же нельзя его использовать?
А где в вопросе автора фигурирует слово "использовать" ?
Он-то желает "научить" (т.е. изменить чужую готовую логику), а не "использовать".
"Научить" - никак, а вот "использовать" (т.е. "научить" свою прикладную логику использовать готовую чужую транспортную логику) - это пожалуйста.
Личность (2006-02-07 09:35:00) [19]Ну, и где здесь ответ почему же нельзя его использовать? если им все равно, бери да используй...
Digitman (2006-02-07 09:06:00) [20]
> Личность (07.02.06 08:48) [2]
TServer/ClientSocket - компоненты транспортногоуровня !
Никаких прикладных надстроек, позволяющих вести речь о каких-то там cgi , ISAPI и пр., эти компоненты не имеют. Им глубоко фиолетово, какого рода и содержимого информация передается с их помощью между партнерами по соединениям.