从python网络套接字服务器解码javascript客户端WebSocket中的utf8

bfhwhh0e  于 2022-11-11  发布在  Python
关注(0)|答案(1)|浏览(143)

我尝试通过python中的WebSocket asyncio作为服务器发送整数到JS websocket客户端。我已经从python端用utf8编码。但我不知道如何从js端解码值。任何建议都将非常有帮助。
它在我的网页浏览器控制台中显示如下:

来自服务器的消息Blobsize:2类型:“"原型:斑点

先谢谢你。
code-python server

import asyncio
import websockets

all_clients = []

current_coordinates = 50;
updated_coordinates = 202;

async def send_message():
    for client in all_clients:
        await client.send(str(current_coordinates).encode('utf8'))

async def new_client_connected(client_socket, path):
    print("New client connected!")
    all_clients.append(client_socket)

    while True:
        new_message = await client_socket.recv()
        print("client Sent:", new_message)
        await send_message()

async def start_server():
    print("server started")
    await websockets.serve(new_client_connected, "localhost", 7999)

if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    event_loop.run_until_complete(start_server())
    event_loop.run_forever()

code JS Client

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Socket Thing1</title>
 </head>
 <body>
     SocketClientdemo
     <button onclick="sendMsg()">update value</button>
 </body>
 <script>
     // Create WebSocket connection.
     const socket = new WebSocket("ws://localhost:7999/");

     // Connection opened
     socket.addEventListener('open', function (event) {
         console.log('Connected to the WS Server!')
     });

     // Connection closed
     socket.addEventListener('close', function (event) {
         console.log('Disconnected from the WS Server!')
     });

     // Listen for messages
     socket.addEventListener('message', function (event) {
         console.log('Message from server ', event.data);

         num_string = event.data
         $('#log').html(num_string);

     });
     // Send a msg to the websocket
     const sendMsg = () => {
         socket.send('update value!');
     }
 </script>
 <div class="container">
    <div class="jumbotron">
<ul id="messages"></ul>
<div class="container" id="content">
<h3>Current Value is:</h3>
<div id="log">
</div>
</div>
 </html>
8yoxcaq7

8yoxcaq71#

首先,将普通字符串编码为utf-8是不必要的,您只需要await client.send(str(current_coordinates))。其次,如果message.data是一个blob,那么您只需要将其转换为字符串

socket.addEventListener('message',async function (event) {
     var data = event.data;
     // checking is blob
     if(data instanceof Blob){
        // converting blob to text
        data= await data.text()
     }else{
        // if data is a number or something, change it to a string:OPTIONAL
        data=data.toString();
     }
     console.log('Message from server ', data);

     $('#log').html(data);

 });

相关问题