如何使用WebSocketApp发送二进制数据的Python WebSocket客户端(而不是create_connection)?

4

我选择了WebSocketApp,因为它可以永久保持连接。不幸的是,WebSocketApp没有像create_connection一样提供ws.send_binary()方法。我想发送二进制数据消息并解码传入的消息,请帮助我,以下是原始示例:

import websocket
def on_message(ws, message):
    print(message)
def on_error(ws, error):
    print(error)
def on_close(ws):
    print('Websocket: closed')
def on_open(ws):
    print('Websocket: open')
ws = websocket.WebSocketApp('ws://echo.websocket.org/',on_message = on_message,on_error = on_error,on_close = on_close,on_open = on_open)
ws.run_forever()

1
你可以使用Base64对二进制数据进行编码,并将其作为文本传输。 - stackprotector
3个回答

7

试试这个:

ws.send(data, websocket.ABNF.OPCODE_BINARY)

2
您可以使用 Websocketsws4py(ws.send(buf, binary=True)),两者都可以直接发送二进制数据。

1
实际上有两种方法可以实现这一点:
  1. 使用websocket-client的create_connection方法
from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/")
print("Sending 'Hello, World'...")
ws.send_binary([100, 220, 130])
print("Sent")
print("Receiving...")
result =  ws.recv()
print("Received '%s'" % result)
ws.close()

使用websocket-client的WebSocketApp。
import _thread
import time

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws, close_status_code, close_msg):
    print("### closed ###")

def on_open(ws):
    def run(*args):
        for i in range(3):
            time.sleep(1)
            ws.send(byte_data, websocket.ABNF.OPCODE_BINARY)
        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_open=on_open,
                              on_message=on_message,
                              on_error=on_error,
                              on_close=on_close)

    ws.run_forever()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接