2014-10-17 7 views
0

Возможно ли, что несколько процессов прослушиваются в одном и том же сокете?Несколько процессов, прослушивающих один и тот же сокет

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

+0

Я думаю, что [этот ответ] [1] должен охватывать большинство ваших вопросов. [1]: http://stackoverflow.com/a/670897/2346527 –

ответ

1

Возможно, что много процессов прослушивают один и тот же порт с помощью fork().

Фактически большинство веб-серверов используют это для повышения производительности, когда есть требование получать сообщение от огромного числа клиентов.

Просто создайте слушателя & fork процессов. Теперь все процессы будут прослушиваться на одном и том же порту. Теперь, как они делят входящие запросы между собой, полностью зависит от ОС, как в Solaris, запросы делятся между процессами на циклическом уровне.

Но для вашего сценария вы можете использовать мультиплексирование сокетов (select()) для достижения требуемого результата.

+0

Просто быть в курсе того, что 'принимаю()' может потерпеть неудачу! –

+0

Когда и как принимаю может сбой приятеля ..... Я использовал оба из них несколько раз. Принять никогда не удавалось для меня. Yup выберите время ожидания, но это не проблема. – Khanjarrr

+1

Технически возможно, что уведомление с готовностью будет поступать одновременно на оба процесса, но только один сокет будет «accept()» ed, позволяя другому получить код ошибки «EAGAIN». Комментарий был более нарисован выше в качестве примечания к OP :) –

Смежные вопросы