web-dev-qa-db-fra.com

Existe-t-il un client WebSocket implémenté pour Python?

J'ai trouvé ce projet: http://code.google.com/p/standalonewebsocketserver/ pour un serveur WebSocket, mais je dois implémenter un client WebSocket en python, plus précisément, j'ai besoin de recevoir des commandes. depuis XMPP sur mon serveur WebSocket.

90
diegueus9

http://pypi.python.org/pypi/websocket-client/

Ridiculement facile à utiliser.

 Sudo pip install websocket-client

Exemple de code client:

#!/usr/bin/python

from websocket import create_connection
ws = create_connection("ws://localhost:8080/websocket")
print "Sending 'Hello, World'..."
ws.send("Hello, World")
print "Sent"
print "Reeiving..."
result =  ws.recv()
print "Received '%s'" % result
ws.close()

Exemple de code serveur:

#!/usr/bin/python
import websocket
import thread
import time

def on_message(ws, message):
    print message

def on_error(ws, error):
    print error

def on_close(ws):
    print "### closed ###"

def on_open(ws):
    def run(*args):
        for i in range(30000):
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print "thread terminating..."
    thread.start_new_thread(run, ())


if __== "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                                on_message = on_message,
                                on_error = on_error,
                                on_close = on_close)
    ws.on_open = on_open

    ws.run_forever()
149
Bryan Hunt

Autobahn a une bonne implémentation de client Websocket pour Python ainsi que de bons exemples. J'ai testé les éléments suivants avec un serveur Tornado WebSocket et tout a fonctionné.

from twisted.internet import reactor
from autobahn.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS


class EchoClientProtocol(WebSocketClientProtocol):

   def sendHello(self):
      self.sendMessage("Hello, world!")

   def onOpen(self):
      self.sendHello()

   def onMessage(self, msg, binary):
      print "Got echo: " + msg
      reactor.callLater(1, self.sendHello)


if __== '__main__':

   factory = WebSocketClientFactory("ws://localhost:9000")
   factory.protocol = EchoClientProtocol
   connectWS(factory)
   reactor.run()
19
chrisallick

Depuis que je fais un peu de recherche dans ce domaine récemment (janvier 2012), le client le plus prometteur est en réalité: WebSocket pour Python . Il supporte un socket normal que vous pouvez appeler comme ceci:

ws = EchoClient('http://localhost:9000/ws')

Le client peut être Threaded ou basé sur le projet IOLoop de Tornado . Cela vous permettra de créer un client avec plusieurs connexions simultanées. Utile si vous voulez exécuter des tests de stress.

Le client expose également les méthodes onmessage, opened et closed. (Style WebSocket).

10
kiddouk
  1. Examinez le client echo sous http://code.google.com/p/pywebsocket/ C'est un projet de Google.
  2. Une bonne recherche dans github consiste à: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1 renvoie les clients et les serveurs.
  3. Bret Taylor a également implémenté des sockets Web sur Tornado (Python). Son billet de blog à l'adresse: Web Sockets in Tornado et une API d'implémentation client est présenté à l'adresse tornado.websocket dans la section de support côté client.
0
sw.

web2py a comet_messaging.py, qui utilise Tornado pour les websockets. Regardez un exemple ici: http://vimeo.com/18399381 et ici vimeo. com/18232653