Création d'un serveur multithread en utilisant l'infrastructure SocketServer en python
Cette question est résolue. Le code de travail est donnée ci-dessous dans ce post, trop.
Problème:
Je suis actuellement en train de se familiariser avec le réseau de la programmation avec Python. Je suis actuellement en train de travailler avec SocketServer cadre. Maintenant, ma question est comment puis-je créer des multi-thread serveur peut accepter plus d'un client à l'aide de SocketServer module? En gros, j'ai essayé d'utiliser ce code
t = Thread(target=server.serve_forever())
t.start()
Actuellement dans mon programme, le serveur n'accepte qu'un seul client. - Je me connecter au serveur en utilisant netcat. Le premier client se connecte au serveur sans aucun problème. Si j'essaie de me connecter au serveur à partir de la deuxième client le client maintient juste en attente pour se connecter. Dès que je déconnecte le premier client, le deuxième client se connecte avec le serveur automatiquement. Il me semble que le multi-threading n'est pas de travail. Je ne vois pas où j'ai loupé quelque chose. Tout conseil sera reconnaissant.
Mon code est comme ci-dessous:
#!/usr/bin/env python
import SocketServer
from threading import Thread
class service(SocketServer.BaseRequestHandler):
def handle(self):
data = 'dummy'
print "Client connected with ", self.client_address
while len(data):
data = self.request.recv(1024)
self.request.send(data)
print "Client exited"
self.request.close()
server = SocketServer.TCPServer(('',1520), service)
t = Thread(target=server.serve_forever())
t.start()
Grâce
Mise à jour:
Le code suivant est la solution:
#!/usr/bin/env python
import SocketServer
from threading import Thread
class service(SocketServer.BaseRequestHandler):
def handle(self):
data = 'dummy'
print "Client connected with ", self.client_address
while len(data):
data = self.request.recv(1024)
self.request.send(data)
print "Client exited"
self.request.close()
class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
t = ThreadedTCPServer(('',1520), service)
t.serve_forever()
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Il est beaucoup plus simple que vous le pensez:
Que vous avez juste à utiliser votre nouveau
ThreadedTCPServer
au lieu deTCPServer
.Pour plus d'informations, vous pouvez lire un peu de doc.
Cependant dans votre code vous avez fait quelques erreurs:
target
argument doit être unecallable
objet n'est pas un "déjà-disant" objet.Bien grâce à @Faust pour la suggestion. Le code ci-dessous fonctionne maintenant comme prévu.
Ne devriez-vous pas de la boucle de la
Juste une supposition..