如何使用twisted来侦听多个udp端口?

Cub*_*Ron 5 python twisted

我用Python写了一个服务器,通过UDP进行通信的Twisted库.这一切都运作良好.

我想要做的是扩展该服务器,以便它可以同时接受多个UDP端口上的消息(我使用不同的端口来隔离返回的信息,而不是关于请求的来源).我试图做最简单的事情作为测试 - 我写的代码看起来像这样:

reactor.listenUDP(port, handler)
reactor.listenUDP(port+1, handler)
Run Code Online (Sandbox Code Playgroud)

(第一行是我服务器中的第一行;第二行是要侦听的第二个端口.)

当我运行时,我得到以下内容:

File "./rspServer.py", line 838, in mainLoop
  reactor.listenUDP(self.args.port+1, udpHandler)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 347, in listenUDP
  p.startListening()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 86, in startListening
  self._connectToProtocol()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/udp.py", line 106, in _connectToProtocol
  self.protocol.makeConnection(self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/protocol.py", line 665, in makeConnection
  assert self.transport == None
AssertionError
Run Code Online (Sandbox Code Playgroud)

我从中可以看出,我无法添加第二个UDP侦听器,但这正是我想做的事情(实际上,总共有18个听众 - 这是一个很长的故事).有关如何做到这一点的任何想法?

Rak*_*kis 7

每次调用listenUDP()都需要一个唯一的处理程序实例.除此之外,您的代码看起来很好.