Javascript nodejswebsocket:如何在没有服务器响应的情况下连续发送客户端消息

Javascript nodejswebsocket:如何在没有服务器响应的情况下连续发送客户端消息,javascript,node.js,asynchronous,websocket,Javascript,Node.js,Asynchronous,Websocket,我不熟悉Nodejs基于事件的异步通信。对于Websocket客户机-服务器通信,到目前为止我所了解的是,在套接字连接建立之后,客户机和服务器基于事件触发器相互通信 在客户端,我正在创建一个新的websocket并与Nodejs服务器通信。到目前为止,我的客户端事件包括: 1. socket.on('open', function open() {} 2. socket.on('message', function message(data) {} 3. socket.on('close', f

我不熟悉Nodejs基于事件的异步通信。对于Websocket客户机-服务器通信,到目前为止我所了解的是,在套接字连接建立之后,客户机和服务器基于事件触发器相互通信

在客户端,我正在创建一个新的websocket并与Nodejs服务器通信。到目前为止,我的客户端事件包括:

1. socket.on('open', function open() {}
2. socket.on('message', function message(data) {}
3. socket.on('close', function close() {}
4. socket.on('error', function error(err) {}
套接字建立后,每次服务器发送响应消息时,
socket.on('message')
都会被触发。目前,我正在向此函数中的服务器发送客户端消息

但是,服务器端的逻辑是,客户端将持续发送消息,服务器将接受这些消息,但可能不会发送回回复(“message”可能不会一直被触发,因此,根据我的逻辑,如果服务器没有响应,我将无法从客户端发送更多消息

我尝试的解决方案是: 在
socket.on('open'
)的回调函数中,我保持了一个
async.while()
循环,以持续向服务器发送消息。在
socket.on('open'
中,我保持了上面列出的其余事件

但是,当我运行代码时,来自客户端的所有消息都会依次发送,但是,
socket.on('message'
)根本不会被触发。从服务器日志中,我已确认服务器正确发送消息

从这个行为来看,while循环实际上就像一个阻塞的while循环,我不想这样!我做错了什么

由于保密问题,我无法粘贴我所有的源代码,但我正在使用
async.while()
循环粘贴我的
socket.on('open'
正文)。此外,我还在为其他事件添加占位符

代码如下:

 var count=10;
 socket.on('open', function open() {

    async.whilst(
        function () { return count>=0; },
        function (callback) {
                console.log("Allowed to send msgs? YES");       
                senddataToServer(socket); //This function sends data to server using a callback function to catch error, hence asynchronous.
                count--;
                callback();
        },
        function (err) {
            console.log("Allowed to send msgs? NO");    
            socket.close();
        }
    ); 
  });

socket.on('message', function message(data) {}
socket.on('close', function close() {}
socket.on('error', function error(err) {}

senddataToServer(socket){}

我从这个链接获得了异步的代码。,

您需要决定要触发客户端向服务器发送新数据的内容。您不应该使用来自服务器的传入消息来触发与传入服务器消息无关的客户端发送

触发客户端发送的选项有:

  • 使用
    setTimeout()
    setInterval()
    定期(例如每30秒)向服务器发送内容

  • 响应客户端中的某个事件,并将其用作向服务器发送数据的触发器(例如,单击按钮、移动鼠标、数据到达等)


  • 如果您想更具体地说明您要发送到服务器的内容,以及何时适合发送到服务器,我们可以更具体地建议如何最好地安排或触发发送。

    不要在消息事件内部发送,根据需要从外部发送,而不是只发送一次消息。我不知道如何继续y根据需要从“外部”发送。这就是我尝试使用async.while()的替代解决方案的原因。请检查“我尝试的解决方案”部分。该部分也不起作用。因此,我发布了这个问题。谢谢!在您的代码中,它非常简单:
    socket.send(“hello world”);
    在任何地方运行。例如:
    setInterval(function(){socket.send(+new Date);},1000);
    从所显示的内容来看,我认为根本不需要异步库……一旦建立websocket连接,客户端将开始向服务器发送“Hello”。第一个“Hello”来自服务器的消息将触发处理某些内部逻辑的开始,并且在内部处理结束之前不会向客户端发送任何回复。一旦处理结束,服务器将向客户端发送响应。但是,与此同时,客户端将持续发送“Hello”,并且不会停止。@kajarigd-但是为什么发送没有意义的消息呢从客户端到服务器的“hello”消息。客户端不应该只是在一个紧密的循环中旋转,向服务器发送尽可能多的消息。这效率低得离谱,而且似乎什么也做不到。如果客户端在电池供电的设备(例如平板电脑或智能手机)上运行,它会很快耗尽电池。而且,它会为客户端和服务器的internet连接使用无意义的带宽。如果您描述您真正试图解决的问题,我们可以提供帮助,但我们需要真实的信息。事实上,我用“Hello”示例向您解释了我的要求。一旦创建了websocket,服务器的工作就可以完成监视客户端的浏览器活动(鼠标移动、单击、关键字类型等)。根据客户端正在执行的活动类型,服务器将发送响应。服务器代码不在我的控制范围内,因此我不知道哪些浏览器活动有意义以及在什么条件下。因此,我的工作是编写一个代码,客户端将持续向服务器发送浏览器活动。服务器将重新启动需要时打开。@kajarigd-那么浏览器应该仅在浏览器活动发生时发送数据。为您希望监视的浏览器事件连接事件处理程序,并在获取数据时将其发送到服务器。使用浏览器的事件系统为您触发事件,当您有一些数据时,再将其发送到服务器。您可以对。当我实际使用浏览器时,这很好。现在,我想自动化这些浏览器移动。我想通过创建多个套接字在浏览器上进行负载测试。每个套接字将代表浏览器上的一个客户端。我不知道如何将手动浏览器活动模拟为自动函数调用。因此,我如果有一种方法可以从客户端nodejs javascript代码触发事件,那么我的工作就完成了!