3

socket.io で記述されたサーバーに接続するために、Python で websocket クライアントを記述します。1から取得した現在のコードは次のとおりです。

import websocket, httplib, sys, asyncore
def connect(server, port):

    print("connecting to: %s:%d" %(server, port))

    conn  = httplib.HTTPConnection(server + ":" + str(port))
    conn.request('POST','/socket.io/1/')
    resp  = conn.getresponse() 
    hskey = resp.read().split(':')[0]
    ws = websocket.WebSocket(
                'ws://'+server+':'+str(port)+'/socket.io/1/websocket/'+hskey,
                onopen   = _onopen,
                onmessage = _onmessage,
                onclose = _onclose)

    return ws

def _onopen():
    print("opened!")

def _onmessage(msg):
    print("msg: " + str(msg))

def _onclose():
    print("closed!")


if __name__ == '__main__':

    server = 'localhost'
    port = 8081

    ws = connect(server, port)

    try:
        asyncore.loop()
    except KeyboardInterrupt:
        ws.close()

私の質問は、特定の名前空間に接続するにはどうすればよいですか?

ありがとう

4

3 に答える 3

2

MIT ライセンスの下で PyPI で利用可能なsocketIO-clientを使用できます。単一のソケットのさまざまな名前空間をサポートしています。

from socketIO_client import SocketIO, BaseNamespace

class MainNamespace(BaseNamespace):

    def on_aaa(self, *args):
        print 'aaa', args

class ChatNamespace(BaseNamespace):

    def on_bbb(self, *args):
        print 'bbb', args

class NewsNamespace(BaseNamespace):

    def on_ccc(self, *args):
        print 'ccc', args

mainSocket = SocketIO('localhost', 8000, MainNamespace)
chatSocket = mainSocket.connect('/chat', ChatNamespace)
newsSocket = mainSocket.connect('/news', NewsNamespace)
mainSocket.wait()
于 2012-08-10T23:14:08.673 に答える
1

名前空間をより簡単に変更できます。

from socketIO_client import SocketIO, BaseNamespace
socket = SocketIO('192.168.4.47', 7777)
chat = socket.define(BaseNamespace, '/openchat')
chat.emit('echo', 'hello openchat my name is Anderson')

https://pypi.python.org/pypi/socketIO-clientでこの問題を解決しました

時間を大幅に節約できますように

于 2014-11-18T08:35:32.227 に答える
0

Wireshark を使用して Socket.IO で確立された接続を盗聴し、Websocket 接続を介して正しいパケットを送信して、Socket.IO クライアントであることを偽造することをお勧めします。次に、Socket.IO のパケットとメッセージング プロトコルを実装します。層。

パケット タイプの基本的なドキュメントは次のとおりです。

http://gevent-socketio.readthedocs.org/en/latest/packet.html#module-socketio.packet

また、ワイヤ レベルのプロトコルを示すテスト スイートを読むこともできます (おそらく実装する必要があります)。

https://github.com/abourget/gevent-socketio/blob/master/tests/test_packet.py

ドキュメントに示されているように、特定の名前空間がさまざまなタイプのパケットで指定されています。

お役に立てれば。

于 2012-06-23T21:05:10.873 に答える