我正在尝试在python中编写一个多线程服务器,它可以接收多个客户端请求,然后在UDP数据包(端口53)中发送答案。我想知道所有这些线程是否可以同时使用53个。非常感谢(这个问题可能看起来很傻,我是初学者)
答案 0 :(得分:3)
如果指定“重用端口”选项,则可以将多个侦听套接字绑定到同一端口。但根据我的经验,即使这样做,只有一个套接字将接收任何给定的数据包(除非您正在接收多播数据包)。
mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
通常情况下,当你谈到'多线程服务器'时,你谈的是使用'面向连接'协议(通过TCP,而不是UDP)的服务器,其中有一个服务器套接字监听连接,然后当形成一个连接,它创建一个线程来处理它。
对于多线程UDP服务器,您可能只有一个插槽可以排队请求,并且有多个线程从队列中拉出并完成工作。线程本身不需要处理套接字。
(注意:根据您的平台,您可能需要使用SO_REUSEADDR。有些信息here。)
答案 1 :(得分:0)
请不要。请改用Twisted。它已经完成了所有这些事情。