шаблон сервера

Общие вопросы программирования, алгоритмы и т.п.

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

Ответить
rom
незнакомец
Сообщения: 9
Зарегистрирован: 29.01.2008 20:48:00
Откуда: Санкт-петербург
Контактная информация:

шаблон сервера

Сообщение rom »

Может кто поделится наработкой?
Я застрял на объединении примеров демона+сервера =(
boykov
незнакомец
Сообщения: 7
Зарегистрирован: 13.02.2008 08:43:55

Сообщение boykov »

эта... сервера чего?
коли сетевого сервера -- дык
<слушаем на порту>
коли пришел коннекто, то форк себя и начало обмена. По окончании обмера -- ендец. Основной тред не ждет окончания субтреда.

сервера приложений -- там сложее.
rom
незнакомец
Сообщения: 9
Зарегистрирован: 29.01.2008 20:48:00
Откуда: Санкт-петербург
Контактная информация:

Сообщение rom »

Сетевого.
Может тогда так: сначала форкаемся, слушаем, и при получении форкаемся?

Раз уж пошел разговор, как тогда с сервером приложений?
Аватара пользователя
Deepthroat
постоялец
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven
Контактная информация:

Сообщение Deepthroat »

Зачем вообще форкаться? Есть, вообще-то, потоки. Основной поток - цикл, который ждет соединений. Появляется соединение, создается поток для соединения, а основной поток вновь переходит к ожиданию.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

а потому что для демона первый форк обязателен =)
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

Deepthroat писал(а):... Появляется соединение, создается поток для соединения, а основной поток вновь переходит к ожиданию....


В принципе, это классическая схема работы TCP-шного сервера. Она годится и для unix-подобных операционок и для осей семейства windows.
Однако при таком подходе есть большой подводный камень. В случае серъёзной нагрузки на сервер, количество потоков может быть слишком большим. Сам лично под win2k сталкивался с ситуацией, когда при очередном подключении подвисал вызов TThread.Create. Трассировка кода показала, что висла API функция CreateThread. Плюс ко всему, возможна ситуация, когда необходимо синхронизировать клиентские потоки между собой. Например, когда они используют какие то общие массивы данных. При этом велика вероятность получения ситуации типа deadlock.
Поэтому, при работе в win32 среде, я предпочитаю организовывать сервер с помощью асинхронных сокетов, работающих через оконные сообщения. В этом случае, поток, получающий данные от клиентов и организующий подключения всегда один и нет необходимости следить за потоками и организовывать синхронизацию между ними.
Хотя, конечно, этот механизм не является кроссплатформенным. Что при работе с FPC может быть критичным.
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

2B, нет ли у вас информации, как можно организовать обмен с использованием запроса CONNECT? Я не имею в виду стандартные отговорки "после установки соединения могут обмениваться произвольными данными", а именно примеры с Keep-Alive

Спасибо
Аватара пользователя
*vmr
постоялец
Сообщения: 168
Зарегистрирован: 08.01.2007 00:46:07
Откуда: Киев
Контактная информация:

Сообщение *vmr »

HTTP ?
Timid
постоялец
Сообщения: 290
Зарегистрирован: 21.11.2007 20:33:15

Сообщение Timid »

Именно, например такого: CONNECT /index.cgi /HTTP1.1
Причем со стороны и клиента, и сервера
Желательно, примеры с SSL.
Ответить