Python Prise De Plusieurs Clients

Donc je suis en train de travailler sur une application iPhone qui nécessite une prise de gérer plusieurs clients pour les jeux en ligne. J'ai essayé Tordus, et avec beaucoup d'effort, je n'ai pas réussi à obtenir un tas d'info pour être envoyé à la fois, c'est pourquoi je vais maintenant tenter de socket.

Ma question est, à l'aide du code ci-dessous, comment voulez-vous être en mesure d'avoir plusieurs clients connectés? J'ai essayé de listes, mais je ne peux pas trouver le format qui. Comment cela peut-il être accompli lorsque plusieurs clients sont connectés à la fois et je suis en mesure d'envoyer un message à un client spécifique?

Merci!

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 50000                # Reserve a port for your service.

print 'Server started!'
print 'Waiting for clients...'

s.bind((host, port))        # Bind to the port
s.listen(5)                 # Now wait for client connection.
c, addr = s.accept()     # Establish connection with client.
print 'Got connection from', addr
while True:
   msg = c.recv(1024)
   print addr, ' >> ', msg
   msg = raw_input('SERVER >> ')
   c.send(msg);
   #c.close()                # Close the connection
  • Faire un tout de c, addr = s.accept() quand un client connecté à les stocker dans un client_list, puis démarrer un Thread d'elle.
  • Serait-il comme.... alors: c, addr = s.accept() client_list = [] client_list.append(c, addr)
  • Je sais que c'est un énorme changement, mais envisagez de Ruby EventMachine - j'ai trouvé le EventMachine documentation nettement plus facile à lire et à comprendre que les Tordus de la documentation. L'inconvénient de Ruby est le plus petit de l'écosystème de la bibliothèque de liaisons et des paquets, mais c'est mieux que de il était une fois...
  • Je préfère le bâton avec Python, je pense qu'il serait bon de rester avec elle. Merci pour votre suggestion mais.
  • Vous avez besoin d'avoir le client_list=[] sortir de la boucle while, en est un bon exemple heresi vous voulez juste C-c C-v.
  • ouais, je peux comprendre, surtout si vous avez d'autres code écrit en Python. Il vient de me frappe à chaque fois que je vois Tordu documentation compliqué qu'ils ont fait quelques choses...
  • Je ne suis pas très expérimenté dans le présent, donc je ne peux pas tout à fait le comprendre. Je ne suis pas le comprendre assez bon.
  • Avez-vous vérifié l'exemple de lien? Modifier ensuite l'exécuter, et vous obtiendrez ce que vous voulez. Le Serveur peut gérer plusieurs clients. Si vous voulez en savoir plus, lire le code.
  • Donc je ne peut pas utiliser de listes? Il a d'être qu'en profondeur? Je sais que lorsque j'ai utilisé Tordu, il semblait plus simple.
  • Twisted est un plus complexe, tordu asynchrone lib que l'exemple. Si vous faites vraiment un projet très complexe, il vaut la peine de passer du temps à l'apprendre. Lorsque vous utilisez des listes, il est plus comme une façon synchrone dans lequel votre code est bloqué dans chaque réseau de communication.
  • Pouvez-vous me donner un début dans cette boucle? Je ne peux pas penser dès maintenant. 🙁
  • Un thread par client n'est pas à l'échelle. Je sais Tordu est difficile à obtenir, mais une fois que vous avez une certaine expérience avec elle, c'est le goto-outil pour presque toutes les choses liées. Des trucs comme celui que vous essayez de résoudre.

InformationsquelleAutor Alec | 2012-05-30