Как я могу заставить сервер слушать TCP и UDP? - PullRequest
3 голосов
/ 07 декабря 2010

Я использую Python Twisted, и у меня работают два отдельных сервера, один, который получает TCP, один, который получает UDP, и каждый из них использует

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

и

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

Ониоба работают, но теперь я хочу объединить их в один сервер, который получает как TCP, так и UDP, но они оба используют переменную reactor.Это не reactor витая, не моя собственная.Если бы это было мое, я мог бы просто поменять имя для каждого.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Это просто перефразировка ответа MarkR, и это правильно, но я подумал, что было бы немного яснее объяснить, как именно это работает:

Вместо того, что вы предлагаете, ваша программа должна выглядеть такэто:

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

Полезно думать о reactor.run() как о значении «запусти всю программу, а затем выйди, все готово».Вы должны запускать реактор только один раз для каждой программы.Однако перед его запуском и во время его работы вы можете вызывать столько методов, сколько захотите, чтобы прослушивать новые протоколы или вызывать новые синхронизированные события.

4 голосов
/ 07 декабря 2010

Вы можете просто вызывать listenTCP и listenUDP при запуске столько раз, сколько вам нужно, до реактора.обращаться с ними соответственно.

...