从python websocket服务器解码javascript客户端websocket中的utf8



我正试图通过python中的websocket asyncio将整数作为服务器发送到JS websocket客户端。我已经从python端使用utf8进行了编码。但是我不知道如何解码js端的值。任何建议都会很有帮助。

它在我的网络浏览器控制台中显示如下:

来自服务器的消息Blob大小:2类型:"quot;[[原型]]:Blob

提前谢谢。

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>

首先,将普通字符串编码为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);

});

最新更新