簡體   English   中英

當服務器脫機時,socket.io會發出

[英]socket.io emit when server is offline

我正在使用socket.io v1.3.6(nodejs)並嘗試使用以下代碼從瀏覽器發出數據。

客戶代碼

 var socket = io.connect('http://something.com:3300/'); function sendMessage(message) { socket.emit('message', message); } 

服務器代碼

 var io = require('socket.io').listen(3300); io.sockets.on('connection', function (socket) { messageHandler(socket); }); function messageHandler(socket) { socket.on('message', function (data) { console.log('Captured a message : ' + data); }); } 

我的套接字服務器http://something.com:3300/最初是關閉的,並嘗試調用少量sendMessage() - (比如大約10個調用)

正如預期在瀏覽器中我將在控制台日志中獲得握手錯誤。

我等了5分鍾,啟動了socket服務器。

但令人驚訝的是,一旦握手建立,在離線期間發送的所有消息都將在服務器中捕獲。

我的問題:1)這個脫機邏輯是socket.io或WebSocket規范的一部分嗎? 2)我搜索了很多離線模式socket.io問題,並看到了一些特殊處理建議來捕獲離線消息。 但是如果沒有那些特殊的離線檢查,這怎么工

是的,在第一次連接之前有一個'離線'緩沖包,在這里看一下socket.js的實現:

https://github.com/socketio/socket.io-client/blob/master/lib/socket.js

(特別檢查onconnect和emitBuffered函數/屬性)

我通過重新連接時的這個小改動解決了這個問題:

mySocket.on('reconnect', function() {

  //Avoid that buffered emits getting send again
  mySocket.sendBuffer=[];

  ...
});

通過將sendBuffer設置為空數組,可以避免在重新連接時再次發送包。 當然,您應該自己處理發送嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM