LINUX.ORG.RU

хороший стиль написания правильного сервера


0

0

вопрос к опытным программерам,
надо написать сервер, который бы сидел демоном и слушал бы входящие соединения по unix сокетам и по обычным (bsd?)сокетам. работать этот сервер должен во всех распространеных дистрах. нагрузка не большая, но "персональная забота" каждому соединению должна быть оказана. все "кирпичики" я уже вроде как собрал (socket, bind, listen, accept, select)& Но проблема в том какая "классическая архитектура"? Одни говорят, пользовать select чтобы не блокировать main control flow. другие, надо "форкать" каждое новое соединение. третьи, предлагают select и заводить нити на соединения...
как написать правильно?

anonymous

Классически - форкать (см. Сендмэйл), а по человечески лучше нити заводить с надеждой, что в линуксе когда-нибудь сделают нормальные нити.

anonymous
()

не факт что класически форкать
все смотрим на squid он не форкается однако тянуть может фигову тучу соединений.

Вопрос в применяемости демона и что от него надо.
Можно не форкаясь отрабатывать пул сокетов.
Можно форкаясь или делая нити.
Можно смешанно ....

Все зависит от требований к демону

вторая часть чтоб эта потеха могла собраться в любом дистре рекомендую
воспользоваться пакетами automake + autoconf
для создания скрипта configure который в свою очередь создаст Makefiles

anonymous
()

если нагрузка небольшая, то лучше использовать xinetd

ananas ★★★★★
()

держать пул отфорканных серверов.

anonymous
()

спасибо за ответы, xinetd - хорошая идея (чего я сам до нее не додумался?!) только вот с UNIX сокетами она по-моему не работает. то есть я с мана не нашел как можно попросить xinetd слушать AF_UNIX.

anonymous
()

А зачем AF_UNIX прописывать в xinetd.conf?

Противоречие какое-то получается... Почитаю доки еще раз

и конкретнее напишу, почему удивился.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.