Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的异步(nodejspython)WebSocket不能立即连接?_Javascript_Python_Node.js_Socket.io_Aiohttp - Fatal编程技术网

Javascript 为什么我的异步(nodejspython)WebSocket不能立即连接?

Javascript 为什么我的异步(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脚本将输出数据,但服务器至少在几分钟内不会接收到数据,即使在它开始接收数据之后,它也不会接收它之前没有接收到的数据

这是我之前的一个问题的延续,基于本教程

我有一个异步隧道,连接一个节点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.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
协议的更多信息