我发现了这个项目: 用于 WebSocket 服务器的 http://code.google.com/p/standalonewebsocketserver/,但是我需要在 python 中实现一个 WebSocket 客户端,更确切地说,我需要在我的 WebSocket 服务器中从 XMPP 接收一些命令。
Web2py 拥有 comet _ messaging.py,它使用了龙卷风来处理 websockets 看这里的一个例子: http://vimeo.com/18399381和这里的 vimeo。Com/18232653
因为我最近在这个领域做了一些研究(1912年1月) ,最有前途的客户实际上是: 用于 Python 的 WebSocket。它支持一个普通的套接字,您可以这样调用:
ws = EchoClient('http://localhost:9000/ws')
该 client可以是 Threaded或基于从 龙卷风项目的 IOLoop。这将允许您创建多个并发连接客户端。如果您想运行压力测试,那么它很有用。
client
Threaded
IOLoop
客户端还公开了 onmessage、 opened和 closed方法(WebSocket 风格)。
onmessage
opened
closed
Autobahn 有一个很好的用于 Python 的 websocket 客户端实现以及一些很好的示例。我测试了下面的龙卷风 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()
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 "Receiving..." 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()