Je suis en train de faire un serveur TCP simple à l'aide Twisted, qui peut faire une interaction entre le client diffirent connexions.Le code principal est comme ci-dessous:Problème avec le serveur TCP dans Twisted
#!/usr/bin/env python
from twisted.internet import protocol, reactor
from time import ctime
#global variables
PORT = 22334
connlist = {} #store all the connections
ids = {} #map the from-to relationships
class TSServerProtocol(protocol.Protocol):
def dataReceived(self, data):
from_id,to_id = data.split('|') #get the IDs from standard client input,which looks like "from_id|to_id"
if self.haveConn(from_id): #try to store new connections' informations
pass
else:
self.setConn(from_id)
self.setIds(from_id,to_id)
if to_id in self.csids.keys():
self.connlist[to_id].transport.write(\
"you get a message now!from %s \n" % from_id) #if the to_id target found,push him a message.doesn't work as expected
def setConn(self,sid):
connlist[sid] = self
#some other functions
factory = protocol.Factory()
factory.protocol = TSServerProtocol
print 'waiting from connetction...'
reactor.listenTCP(PORT, factory)
reactor.run()
Comme les commentaires mentionnés , si une nouvelle connexion client vient, je vais stocker sa poignée de connexion dans un varaible global connlist
qui est comme
connlist = {a_from_id:a_conObj,b_from_id:b_conObj,....}
et parse également l'entrée carte alors son de à l'information dans ids
.Ensuite Je vérifie s'il y a une clé dans le ids
correspond à "to_id" .if actuel, obtenir le handle de connexion en utilisant connlist[to_id]
et pousser un message à la connexion cible.Mais ça ne fonctionne pas.Le message ne montre que dans une même connexion.Espoir quelqu'un peut me montrer quelques directions à ce sujet .
Merci!
Votre fonction 'dataReceived' fait référence à un' self.connlist' local, pas au global. N'utilisez pas de globaux. Vous voudrez peut-être stocker la liste des connexions sur l'instance de l'usine et y accéder à partir d'une instance de protocole via 'self.factory.connlist' – MattH
@ MattH, merci pour la note. Pourriez-vous me dire quel objet dois-je stocker dans' connlist' si je fais cela en usine? – Young
Ce serait génial si vous pouviez trouver un meilleur titre pour cette question, quelque chose qui pointe un peu plus précisément ce que vous essayez de demander. D'autres personnes ont également des questions similaires, ce qui les aiderait à le trouver lors de la recherche. Beaucoup trop de questions SO Twisted sont intitulées juste "problème avec Twisted" ou "Twisted cassé, besoin d'aide" ou "aide avec Twisted", et cetera. – Glyph