如何让服务器同时监听TCP和UDP?
我正在使用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()
理解为“运行整个程序,然后退出,我完成了”。每个程序只需要运行一次反应器。不过,在你运行它之前,或者在它运行的时候,你可以随意调用很多方法来监听新的协议或者触发新的定时事件。