我是Nodejs基于事件的异步通信的新手。对于Websocket客户端 - 服务器通信,我到目前为止已经发现,在套接字连接建立之后,客户端和服务器将基于事件触发器相互通信。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
:whilst(test, fn, callback)
不发送消息内部事件,根据需要从外部发送,而不是每消息一次。 – dandavis 2015-02-23 23:08:20
我不知道如何从'需要外部'不断发送。这就是为什么我用async.whilst()尝试了一个备用解决方案。请检查'我尝试过的解决方案'部分。那部分也不起作用。因此,我发布了这个问题。谢谢! – kajarigd 2015-02-23 23:13:54
它很简单,在你的代码中:'socket.send(“hello world”);'在任何地方运行。例如:'setInterval(function(){socket.send(+ new Date);},1000);'我根本看不到任何需要异步库的信息... – dandavis 2015-02-23 23:16:10