Есть ли клиент WebSocket для python?

Я нашел этот проект: http://code.google.com/p/standalonewebsocketserver/ для сервера websocket, но мне нужно реализовать клиент websocket в python, точнее мне нужно для получения некоторых команд из xmpp на моем сервере websocket.

Ответ 1

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

Смешно прост в использовании.

 sudo pip install websocket-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()

Другой пример:

#!/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 __name__ == "__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()

Ответ 2

Autobahn имеет хорошую реализацию клиента websocket для Python, а также некоторые хорошие примеры. Я тестировал следующее с сервером Tornado WebSocket, и он работал.

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 __name__ == '__main__':

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

Ответ 3

Поскольку в последнее время я занимаюсь небольшим исследованием в этой области (январь, 12), наиболее перспективным клиентом является: WebSocket для Python. Он поддерживает обычный сокет, который вы можете вызвать следующим образом:

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

client может быть Threaded или на основе IOLoop из проекта Tornado. Это позволит вам создать клиент с несколькими одновременными подключениями. Полезно, если вы хотите провести стресс-тесты.

Клиент также предоставляет методы onmessage, opened и closed. (Стиль WebSocket).

Ответ 4

У web2py есть comet_messaging.py, который использует Tornado для websockets, посмотрите здесь пример: http://vimeo.com/18399381 и здесь vimeo. com/18232653

Ответ 5