Java 服务器(tomcat)上未收到 Python WebSocket send()

问题描述 投票:0回答:1

我有在 Tomcat 服务器上运行的 java 应用程序。它可以与 Android/iOS/Web 应用程序正常工作。使用用户名和密码登录后,服务器将生成一个令牌,应用程序使用该令牌与服务器建立 websocket 连接,以从服务器接收和向服务器发送消息。

要接收来自服务器的广播,应用程序需要向服务器发送一条消息,告知他们想要订阅的消息代码。

现在,我想实现Python(版本3.9.6)应用程序来从服务器接收和发送消息。为了首先简单起见,我通过使用邮递员和硬编码令牌登录来跳过登录过程。

在第一次尝试中,我使用库

websockets

import asyncio
import websockets

# Define the WebSocket URL
async def connect_and_listen(url, headers):
    print("called connect_and_listen")
    async with websockets.connect(url, extra_headers=headers) as websocket:
        print("called websockets.connect")
        # Send Subscribe
        try:
            await websocket.send("A_BINARY_MESSAGE")
        except Exception as e:
            print(e)

        print("while true")
        # Loop Receive Broadcast
        while True:
            # Receive data from the WebSocket server
            data = await websocket.recv()
            # Update Excel with the received data using PyXLL functions
            update_excel(data)

def update_excel(data):
    print(data)

url = "ws://localhost:8080/BCST_PATH"
token = "TOKEN"
auth_token = "Bearer " + token
headers = {"Authorization": auth_token}


asyncio.get_event_loop().run_until_complete(connect_and_listen(url, headers))

结果是我没有收到服务器的任何广播。所以我决定将图书馆改为

websocket-client

import websocket

url = "ws://localhost:8080/BCST_PATH"
token = "TOKEN"
auth_token = "Bearer " + token
headers = {"Authorization": auth_token}

ws = websocket.WebSocket()
ws.connect(url, header=headers)

ws.send("A_BINARY_MESSAGE")
print ("Receiving...")
resp = ws.recv()
print ("Receive: %s", resp)
ws.close()

仍然无法工作。我在 Java 应用程序中进行了调试,但它没有收到来自客户端的任何消息(两种情况)。

我使用 Postman 使用相同的 url、令牌和二进制消息尝试了相同的流程,并且它有效。我不知道我的代码出了什么问题。

python-3.x websocket binary
1个回答
0
投票

终于找到解决办法了。我使用第二个代码,它使用

websocket-client
库。添加
websocket.ABNF.OPCODE.BINARY
就可以了!

ws.send("A_BINARY_MESSAGE", websocket.ABNF.OPCODE_BINARY)
© www.soinside.com 2019 - 2024. All rights reserved.