Nodejs-websocket:如何在没有服务器响应的情况下连续发送客户端消息
Nodejs websocket: how to continuously send client message without server response
我是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)
您需要决定触发客户端向服务器发送新数据的方式。您不应该使用来自服务器的传入消息来触发与传入服务器消息无关的客户端发送。
触发客户端发送的选项有:
-
使用
setTimeout()
或setInterval()
以固定的时间间隔(例如,每30秒)向服务器发送内容。 -
响应客户端中的某个事件,并将其用作向服务器发送数据的触发器(如按钮单击、鼠标移动、数据到达等)。
如果您想更具体地说明您试图发送到服务器的内容以及何时将其发送到服务器,我们可以更具体地建议如何最好地安排或触发发送。
- 如何在未直接触发的情况下停止事件
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 在不打开聊天屏幕的情况下制作Zopim-ding代理
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何在不传递此信息的情况下查找被调用的元素
- 如何在不刷新页面的情况下更新显示框
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 在我的情况下,如何进行http请求
- 在不知道深度或父属性的情况下从对象中删除属性
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- Chrome:如何在不嵌套的情况下将两个连续跨距插入可编辑实体中
- 如何在不丢失格式的情况下连续淡入() 元素文本的每个字符,包括嵌套元素
- Nodejs-websocket:如何在没有服务器响应的情况下连续发送客户端消息
- 如何在ng重复的情况下同时获取两个连续的数组对象
- 在没有cron作业的情况下连续运行php函数
- 在不添加两个连续值的情况下,从数组中获取最大和
- JS动画结束循环,希望在不使用的情况下连续循环;setInterval/setTimout
- 如何在不覆盖的情况下连续打开对话框