我是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