如何让服务器同时监听TCP和UDP?

3 投票
2 回答
1569 浏览
提问于 2025-04-16 08:09

我正在使用Python的Twisted库,搭建了两个独立的服务器,一个接收TCP连接,另一个接收UDP连接,它们各自使用

reactor.listenTCP(PORT, factory)
reactor.run()

reactor.listenUDP(PORT, BaseThreadedUDPServer())
reactor.run()

这两个服务器都能正常工作,但现在我想把它们合并成一个服务器,既能接收TCP也能接收UDP。不过,它们都使用同一个变量reactor。这个reactor是Twisted库里的,不是我自己定义的。如果是我自己定义的,我可以给它们换个名字。

谢谢!

2 个回答

4

你可以在程序启动时,随意多次调用listenTCP和listenUDP这两个函数,直到你准备好运行程序。

这样一来,当合适的时机到来时,程序会自动调用你设置的回调函数,针对不同的协议进行处理。

5

这段话其实是在重新表达MarkR的回答,虽然他的说法是对的,但我觉得直接说清楚这个是怎么回事可能更容易理解:

你提议的方式不太对,你的程序应该像这样:

reactor.listenTCP(PORT, factory)
reactor.listenUDP(PORT, BaseThreadedUDPServer())
reactor.run()

可以把reactor.run()理解为“运行整个程序,然后退出,我完成了”。每个程序只需要运行一次反应器。不过,在你运行它之前,或者在它运行的时候,你可以随意调用很多方法来监听新的协议或者触发新的定时事件。

撰写回答