2010-12-07 10 views
1

Я пытаюсь написать многопотоковый сервер в python, который может получить несколько клиентских запросов, а затем отправить ответ в пакете UDP (порт 53). Мне было интересно, могут ли все эти потоки использовать 53 одновременно. Большое спасибо (этот вопрос может показаться глупым, я новичок)может использовать несколько потоков один и тот же порт

ответ

0

Просьба не делать этого. Вместо этого используйте Twisted. У этого уже есть все такое.

+0

Downvoter: вы отрицать, что плакат должен использовать Twisted, а не изобретать свои собственные вещи? – 2010-12-07 06:53:29

3

Если вы укажете опцию «reuse port», то да, вы можете связать несколько сокетов для прослушивания с одним и тем же портом. Но по моему опыту, даже при этом, только один из сокетов получит любой пакет (если вы не принимаете многоадресные пакеты).

mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) 

Обычно, хотя, когда вы говорите о «многопоточном сервере», вы говорите о сервере, используя «ориентированного соединения» протокол (TCP над, а не UDP), где есть сокет-сервер прослушивает соединения , а затем, когда соединение сформировано, оно создает поток для борьбы с ним.

Для многопоточного UDP-сервера у вас, вероятно, будет один сокет, который ставит в очередь входящие запросы и имеет несколько потоков, вытягивающих из очереди и выполняющих работу. Нити сами по себе не должны иметь дело с сокетом.

(Примечание: В зависимости от платформы, вы, возможно, придется использовать SO_REUSEADDR вместо Некоторая информация here.).

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