Python用に実装されたWebSocketクライアントはありますか?[閉まっている]


100

私はこのプロジェクトを見つけました:WebSocketサーバー用のhttp://code.google.com/p/standalonewebsocketserver/ですが、PythonでWebSocketクライアントを実装する必要があります。正確には、WebSocketサーバーでXMPPからいくつかのコマンドを受信する必要があります。


2
アウトバーンを試してみませんか?tavendo.de/autobahn
Len Holgate、

3
AutobahnはTwistedに基づいているので、TwistedがXMPPにも非常によく対応していることにも注意してください。つまり、metajack.im/2008/09/04/… 1つのTwistedインスタンスでAutobahn for WebSockets + XMPPを実行できます。 。免責事項:私はアウトバーンの作者です。
oberstet 2012年

回答:


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したところ、問題なく動作しました。唯一の問題はpythoncygwin python との衝突でした。そのため、/cygdrive/C/Python27/pythonActivePythonを取得するために明示的に実行する必要がありました
Mark Lakata

@bryanは、サーバーが切断された場合にパイプが壊れるエラーを処理する方法を処理する方法を探る-閉じたパイプ/ソケット/ fdへの書き込み(おそらくクライアントが切断された)!!!
Kanwal Prakash Singh

実行時にコマンドラインでURLを渡す方法を教えてください。たとえば、コマンドラインでws( "ws:// localhost:8080 / websocket")のURLを指定する必要がある場合、.. ws = create_connection( "ws:// localhost:8080 / websocket").. like ws = create_connection (sys.argv)
Soundarya Thiagarajan

1
@KanwalPrakashSinghクライアントの切断問題を解決しましたか?
Jey

ねえ、使用しないでくださいsudo。を使用し--userます。
Perfi 2018年

22

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

クリスさん、このautobahn websocketサーバーを使用してサーバー側からクライアントを強制的に切断する方法を知っていますか?これを行うには、どの関数を呼び出す必要がありますか?
Johnydep 2012

ねえ、@ Johnydepええ、ウェブソケット接続の両方の参加者が「クローズ」を開始できるのは仕様の一部だと思います。私を引用しないでください。とにかく、私はソースコードを見て、「dropConnection」と「sendClose」があります。プラグインしてテストするだけです:)
chrisallick

2
from autobahn.twisted.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWSアウトバーンの新しいバージョンの正しいインポートです。stackoverflow.com/questions/21381454/…–
evan54

1
新しいAPIを導入する場合は、コードが何をしているかを説明するとよいでしょう。
user650261

1
wssをサポートしますか?
アルン、

10

最近この分野で少し研究を行っているため(12年1月)、最も有望なクライアントは実際にはWebSocket for Pythonです。次のように呼び出すことができる通常のソケットをサポートします。

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

client可能Threadedに基づくかIOLoopから竜巻プロジェクト。これにより、複数の同時接続クライアントを作成できます。ストレステストを実行する場合に便利です。

クライアントはonmessageopenedおよびclosedメソッドも公開します。(WebSocketスタイル)。


1
同時実行性について:Autobahnクライアントでは最大60kのWS送信接続、Autobahnサーバーでは最大180kの受信WS接続をテストしました。Windowsでは、Twistedを実行しているIOCP(IO Completion Ports)リアクターを使用してテストされ、FreeBSDでは、kqueueリアクターを使用してテストされました。免責事項:私はアウトバーンの作者です。
oberstet 2012年

1
数値について言えば、私の側では、Tornado Websocket(およびWS-for-py)を使用していくつかの拡張テストを行い、簡単に15,000接続を取得しました。それほどではありませんが、とにかくテストには適しています。
kiddouk


0
  1. http://code.google.com/p/pywebsocket/の下にあるエコークライアントを見てください。これは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ソケットも実装しました。彼のブログ投稿:TornadoのWebソケットとクライアント実装APIは、クライアント側のサポートセクションのtornado.websocketにあります。

1
竜巻なしのpythonでwebソケットが必要
diegueus9

@sw。アイテム番号3は、WebSocketクライアントではなく、WebSocketサーバーであるため無効です。
Zoran Pavlovic

@ZoranPavlovicを見てください:tornadoweb.org/en/stable/websocket.html WebSocketクライアントが実装されています。
sw。

@sw。はい。ただし、ポイント3のリンクは、PythonサーバーとJavaScriptクライアントへのリンクです。投稿したばかりの新しいURLで更新する必要があります。検索していただきありがとうございます。それはまさに私が探していたものです。
Zoran Pavlovic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.