可以有多个线程使用相同的端口

时间:2010-12-07 05:39:19

标签: python multithreading

我正在尝试在python中编写一个多线程服务器,它可以接收多个客户端请求,然后在UDP数据包(端口53)中发送答案。我想知道所有这些线程是否可以同时使用53个。非常感谢(这个问题可能看起来很傻,我是初学者)

2 个答案:

答案 0 :(得分:3)

如果指定“重用端口”选项,则可以将多个侦听套接字绑定到同一端口。但根据我的经验,即使这样做,只有一个套接字将接收任何给定的数据包(除非您正在接收多播数据包)。

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

通常情况下,当你谈到'多线程服务器'时,你谈的是使用'面向连接'协议(通过TCP,而不是UDP)的服务器,其中有一个服务器套接字监听连接,然后当形成一个连接,它创建一个线程来处理它。

对于多线程UDP服务器,您可能只有一个插槽可以排队请求,并且有多个线程从队列中拉出并完成工作。线程本身不需要处理套接字。

(注意:根据您的平台,您可能需要使用SO_REUSEADDR。有些信息here。)

答案 1 :(得分:0)

请不要。请改用Twisted。它已经完成了所有这些事情。