是否有针对Python实现的WebSocket客户端?[关闭]


100

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


2
尝试高速公路吗?tavendo.de/autobahn
Len Holgate

3
由于Autobahn基于Twisted,因此也可能值得注意的是Twisted对XMPP也有很好的支持,即metajack.im/2008/09/04/… 因此,您可以在一个Twisted实例上运行WebSockets + XMPP的Autobahn。 。免责声明:我是高速公路的作者。
oberstet 2012年

Answers:


165

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

4
@SSH pip install在Windows上可以正常使用!我使用的是ActivePython 2.7,然后运行了pip install websocket-client,效果很好。唯一的问题是python与cygwin python发生冲突,所以我不得不明确地运行/cygdrive/C/Python27/python以获取ActivePython
Mark Lakata

@bryan hunt如何处理服务器断开连接时的情况,如我遇到断线错误-写入关闭的管道/套接字/ fd(可能客户端已断开连接)!
Kanwal Prakash Singh's

运行时如何在命令行中传递url。例如,如果我需要在命令行中提供ws(“ ws:// localhost:8080 / websocket”)的网址。.ws = create_connection(“ ws:// localhost:8080 / websocket”)..像ws = create_connection (sys.argv)
Soundarya Thiagarajan

1
@KanwalPrakashSingh您是否解决了客户端断开连接问题?
杰伊,2016年

哎呀,别用sudo。使用--user
Perfi

22

高速公路为Python提供了一个很好的websocket客户端实现以及一些很好的示例。我用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()

嗨,克里斯,您知道如何使用此高速公路Websocket服务器从服务器端强制断开客户端吗?我必须调用哪个函数来执行此操作?
Johnydep 2012年

嘿,@ Johnydep是的,我相信websocket连接中的两个参与者都可以发起“关闭”,这是规范的一部分。不过不要引用我。无论如何,我看着源代码,并且有:“ dropConnection”和“ sendClose”我将其插入并对其进行测试:)
chrisallick 2012年

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS是较新版本的高速公路的正确导入。stackoverflow.com/questions/21381454/...
evan54

1
如果要引入新的API,最好解释一下代码在做什么。
user650261 2015年

1
它会支持wss吗?
阿伦(Arun)

10

自从我最近在该领域进行了一些研究(Jan,'12)以来,最有希望的客户实际上是:WebSocket for Python。它支持可以这样调用的普通套接字:

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

clientThreaded或基于IOLoop龙卷风项目。这将允许您创建一个多并发连接客户端。如果要运行压力测试,则很有用。

客户端也暴露了onmessageopenedclosed方法。(WebSocket样式)。


1
关于并发性:我们已经测试了最多60k WS出站连接的Autobahn客户端和最高180000 WS入站连接的Autobahn服务器。在Windows上,使用Twisted运行的IOCP(IO完成端口)反应器进行了测试,而在FreeBSD上,使用kqueue反应器进行了测试。免责声明:我是高速公路的作者。
oberstet 2012年

1
说到数字,就我而言,我已经使用Tornado Websocket(和WS-for-py)进行了一些扩展测试,很容易获得了15k的连接。并不多,但还是很适合测试。
kiddouk'2


0
  1. http://code.google.com/p/pywebsocket/下查看回显客户端,这是一个Google项目。
  2. 在github中的一个很好的搜索是: https //github.com/search? = & = & = & =& =& =14& = & =1它返回客户端和服务器。
  3. Bret Taylor还通过Tornado(Python)实现了Web套接字。他的博客文章位于:Tornado中的Web套接字和客户端实现API,显示在客户端支持部分的tornado.websocket中。

1
但是我需要一个不带龙卷风的python网络sobcket
diegueus9 2011年

@sw。项目编号3无效,因为它不是WebSocket客户端,而是WebSocket服务器。
Zoran Pavlovic 2014年

@ZoranPavlovic查看:tornadoweb.org/en/stable/websocket.html它具有WebSocket客户端实现。
sw。

@sw。是的,但是第3点中的链接指向python服务器和javascript客户端。您应该使用刚刚发布的新网址对其进行更新,并感谢您的发现!这正是我想要的。
Zoran Pavlovic
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.