2010-06-29 116 views
67

我發現這個項目:http://code.google.com/p/standalonewebsocketserver/爲websocket服務器,但我需要在python中實現一個websocket客戶端,更確切地說,我需要從我的websocket服務器中的xmpp接收一些命令。是否有爲python實現的WebSocket客戶端?

+2

嘗試高速公路? http://www.tavendo.de/autobahn/ – 2012-01-10 08:16:34

+3

由於Autobahn基於Twisted,所以Twisted對XMPP也有很好的支持也是值得注意的,例如http://metajack.im/2008/09/ 04/get-twisted-on-xmpp ---未來的扭曲字/ 因此,您可以在一個Twisted實例上運行WebSockets + XMPP的高速緩存。 聲明:我是Autobahn的作者。 – oberstet 2012-01-31 19:21:37

回答

0
  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還在Tornado(Python)上實現了web套接字。他的博客文章位於:Web Sockets in Tornado,客戶端實施API顯示在客戶端支持部分的tornado.websocket
+1

但我需要一個沒有龍捲風的python web sobcket – diegueus9 2011-01-04 16:10:41

+0

我剛剛編輯了答案。看看github上的搜索結果,有很多實現。 – 2011-01-04 18:32:13

+0

@sw。產品編號3無效,因爲它不是WebSocket客戶端,而是WebSocket服務器。 – 2014-03-20 19:26:44

1

的web2py具有comet_messaging.py,它採用了龍捲風的WebSockets在這裏看看一個例子:http://vimeo.com/18399381這裏VIMEO。 com/18232653

10

由於我最近在這方面做了一些研究(1月,'12),最有前途的客戶實際上是:WebSocket for Python。它支持正常的插座,你可以這樣調用:

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

client可以ThreadedTornado項目基於IOLoop。這將允許您創建一個多併發連接客戶端。如果你想運行壓力測試,這很有用。

客戶端還公開onmessage,openedclosed方法。 (WebSocket風格)。

+1

關於併發性:我們已經測試了高達60k的WS傳出連接和高速公路服務器到高達180k WS連接的高速公路客戶端。 在Windows上,使用Twisted running IOCP(IO Completion Ports)reactor對此進行了測試,並在FreeBSD上使用kqueue reactor對其進行了測試。 聲明:我是Autobahn的作者。 – oberstet 2012-01-31 19:15:10

+1

談到數字,在我身邊,我用Tornado Websocket(和WS-for-py)做了一些擴展測試,我很容易獲得15k連接。無論如何,對於測試來說都不是那麼好, – kiddouk 2012-02-02 07:55:09

15

Autobahn爲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() 
+0

嘿克里斯,你知道如何使用這個高速公路websocket服務器強制斷開客戶端從服務器端?我必須打電話來做那個功能? – Johnydep 2012-09-08 21:13:36

+0

嘿,@Johnydep是的,我相信這是規範的一部分,這兩個websocket連接的參與者都可以啓動「關閉」。不要引用我的意思。無論如何,我看了看源代碼,並且有:「dropConnection」和「sendClose」我只是插入並測試它們:) – chrisallick 2012-10-15 20:52:42

+1

'from autobahn.twisted.websocket import WebSocketClientFactory,WebSocketClientProtocol,connectWS'是正確的導入爲新版本的高速公路。 http://stackoverflow.com/questions/21381454/autobahn-cannot-import-name-error – evan54 2015-10-24 21:58:26

116

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

我希望'pip install'在windows上很容易使用:( – 2013-10-09 17:31:10

+4

@SSHThis'pip install'在windows上工作正常!我使用的是ActivePython 2.7並運行'pip install websocket-client',並且它工作正常。問題是'python'與cygwin python發生了衝突,所以我不得不顯式運行'/ cygdrive/C/Python27/python'來獲取ActivePython – 2013-12-12 00:35:07

+0

@bryan狩獵如何處理服務器斷開連接的情況,錯誤 - 寫入一個封閉的管道/套接字/ FD(可能是客戶端斷開連接)!!! – 2016-04-20 08:54:36