是否有为 Python 实现的 WebSocket 客户端?

我发现了这个项目: 用于 WebSocket 服务器的 http://code.google.com/p/standalonewebsocketserver/,但是我需要在 python 中实现一个 WebSocket 客户端,更确切地说,我需要在我的 WebSocket 服务器中从 XMPP 接收一些命令。

198865 次浏览
  1. 看看 http://code.google.com/p/pywebsocket/下面的 echo 客户端,这是一个 Google 项目。
  2. 在 github 中一个好的搜索是: https://github.com/search?type=Everything&language=python&q=websocket&repo=&langOverride=&x=14&y=29&start_value=1,它返回客户端和服务器。
  3. Bret Taylor 也通过“龙卷风”(Python)实现了 web 套接字。他在: 龙卷风中的 Web Sockets的博客文章和客户端实现 API 在客户端支持部分的 龙卷风 Websocket中显示。

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。这将允许您创建多个并发连接客户端。如果您想运行压力测试,那么它很有用。

客户端还公开了 onmessageopenedclosed方法(WebSocket 风格)。

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()