Javascript 为什么我的异步(nodejspython)WebSocket不能立即连接?
这是我之前的一个问题的延续,基于本教程 我有一个异步隧道,连接一个节点JS客户端(send.JS)和一个python服务器(receive.py)。现在send.js输出一个随机数,然后将其发送到Python服务器(receive.py),然后Python服务器将消息发送回js客户端 安装工作正常,但是,服务器需要几分钟才能开始从send.js接收数据,我不知道为什么 Node JS脚本将输出数据,但服务器至少在几分钟内不会接收到数据,即使在它开始接收数据之后,它也不会接收它之前没有接收到的数据,它只会在服务器和客户端最终可以连接时接收数据 我不确定这是否与Python端、节点JS端或其他方面有关 我正在使用节点8.16.1和Python 3.7.3 代码如下: send.jsJavascript 为什么我的异步(nodejspython)WebSocket不能立即连接?,javascript,python,node.js,socket.io,aiohttp,Javascript,Python,Node.js,Socket.io,Aiohttp,这是我之前的一个问题的延续,基于本教程 我有一个异步隧道,连接一个节点JS客户端(send.JS)和一个python服务器(receive.py)。现在send.js输出一个随机数,然后将其发送到Python服务器(receive.py),然后Python服务器将消息发送回js客户端 安装工作正常,但是,服务器需要几分钟才能开始从send.js接收数据,我不知道为什么 Node JS脚本将输出数据,但服务器至少在几分钟内不会接收到数据,即使在它开始接收数据之后,它也不会接收它之前没有接收到的数据
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080')
console.log(ws)
function generateNumber() {
const n = Math.floor(Math.random() * 50);
return {
number: n
};
}
function sendMsg() {
const json = JSON.stringify(generateNumber());
console.log('Sending to server:');
console.log(json);
ws.send(json);
}
function loop() {
setTimeout(() => {
sendMsg();
loop();
}, 5000);
}
ws.on('open', function open() {
console.log('connect')
console.log(ws)
loop()
})
ws.on('message', function(data) {
console.log(data)
})
receive.py
import asyncio
import websockets
async def start(websocket, path):
print("connected")
while True:
data = await websocket.recv()
print(f"< {data}")
await websocket.send(data)
async def main():
server = await websockets.serve(start, 'localhost', 8080)
await server.wait_closed()
asyncio.run(main())
如果需要更多信息,请告诉我。我不知道您是否必须使用正在使用的软件包,但这是我的工作版本,其中包含用于节点的
ws
软件包和用于python的asyncio
和websockets
软件包。问一个有趣的问题
send.js
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080')
console.log(ws)
function generateNumber() {
const n = Math.floor(Math.random() * 50);
return {
number: n
};
}
function sendMsg() {
const json = JSON.stringify(generateNumber());
console.log('Sending to server:');
console.log(json);
ws.send(json);
}
function loop() {
setTimeout(() => {
sendMsg();
loop();
}, 5000);
}
ws.on('open', function open() {
console.log('connect')
console.log(ws)
loop()
})
ws.on('message', function(data) {
console.log(data)
})
receive.py
import asyncio
import websockets
async def start(websocket, path):
print("connected")
while True:
data = await websocket.recv()
print(f"< {data}")
await websocket.send(data)
async def main():
server = await websockets.serve(start, 'localhost', 8080)
await server.wait_closed()
asyncio.run(main())
导入异步IO
导入WebSocket
异步def启动(websocket,路径):
打印(“连接”)
尽管如此:
data=wait websocket.recv()
打印(f“<{data}”)
等待websocket.send(数据)
异步def main():
server=wait websockets.service(启动'localhost',8080)
等待服务器。等待\u关闭()
asyncio.run(main())
是send.js中的ws.send(json)
行,receive.py中的data=wait websocket.recv()
使用该行通过web套接字获取值吗?因此这是ws中内置的东西,websocket.recv()
总是从ws.send()
中查找值。websocket
协议基本上在最低级别上具有发送数据和侦听数据(recieve)的能力。您正在使用的包有更多的抽象构建在上面,这就是为什么您可以发出不同的事件ws
package和Websocket
更简单,这就是我喜欢它们的原因。在这里,您可以了解有关Websocket
协议的更多信息