2010-12-07 7 views
3

J'utilise python tordu et j'ai deux serveurs distincts de travail, qui reçoit TCP, UDP qui reçoit et ils chaque utilisationcomment puis-je faire écouter le serveur TCP et UDP?

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

et

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

Ils travaillent tous les deux, mais maintenant je vouloir les combiner en un serveur qui reçoit à la fois TCP et UDP, mais ils utilisent tous deux la variable reactor. Ce n'est pas le reactor tordu, pas le mien. Si c'était le mien, je pourrais juste changer le nom de chacun.

Merci!

+0

BaseThreadedUDPServer? L'enfilage est-il vraiment une exigence ici? Je pense que cela complique inutilement la question. En outre, à l'avenir, il est utile de publier un programme complet et exécutable au lieu d'un simple extrait. Voir http://sscce.org/ – Glyph

Répondre

5

Ceci est juste une reformulation de la réponse de MarkR, qui est juste, mais je pense qu'il pourrait être un peu plus clair pour préciser exactement comment cela fonctionne:

Au lieu de ce que vous proposez, votre programme devrait ressembler à ceci :

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

Il est utile de penser à reactor.run() comme signifiant « exécuter l'ensemble du programme, puis la sortie, je suis fait ». Vous ne devez faire fonctionner le réacteur qu'une seule fois par programme. Toutefois, avant de l'exécuter et pendant qu'il s'exécute, vous pouvez appeler autant de méthodes que vous le souhaitez pour écouter de nouveaux protocoles ou appeler de nouveaux événements programmés.

+0

omg, merci. C'est ce que je cherchais. Je l'avais en tête, je ne savais pas si tu pouvais le faire comme ça et je suis nouveau dans le twist, donc je ne le comprends pas très bien. Merci pour ton explication! :-) – umm

4

Vous pouvez simplement appeler listenTCP et listenUDP au démarrage, autant de fois que vous le souhaitez, avant reactor.run()

Ensuite, vos callbacks sera appelé au moment opportun pour les protocoles appropriés et vous pouvez gérer les en conséquence.

Questions connexes