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

Nodejs websocket: how to continuously send client message without server response

本文关键字:连续 情况下 消息 客户端 响应 服务器 Nodejs-websocket      更新时间:2024-03-30

我是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'。目前,我正在向该功能内的服务器发送客户端消息。

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

我尝试的解决方案:在socket.on('open'的回调函数中,我保留了一个async.whilst()循环,以便不断地向服务器发送消息。在socket.on('open'之外,我将保留上面列出的其余事件。

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

从这个行为来看,while循环实际上表现得像一个阻塞while循环,这是我不想要的!我在这里做错了什么?

由于保密问题,我将无法粘贴我拥有的全部源代码,但我正在用async.whilst()循环粘贴我的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){}

我从这个链接得到了async.whilst的代码:while(test,fn,callback)

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

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

  1. 使用setTimeout()setInterval()以固定的时间间隔(例如,每30秒)向服务器发送内容。

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

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