最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - socket.io emit when server is offline - Stack Overflow

programmeradmin1浏览0评论

I was working with socket.io v1.3.6 (nodejs) and tried to emit the data from browser using the below code .

Client Code

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

I was working with socket.io v1.3.6 (nodejs) and tried to emit the data from browser using the below code .

Client Code

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

Server Code

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);	
    });
}

my socket server http://something.:3300/ is down initially , and tried to call few sendMessage() - (say around 10 calls)

As expected in the browser i will get the handshake error in console log.

I waited for 5 mins and started the socket server.

But surprisingly all the messages sent during offline are captured in the server, once the handshake is established.

My questions : 1) Is this offline logic as part of socket.io or WebSocket specification ? 2) I searched a lot of offline mode socket.io questions, and saw some special handling remendations to capture offline messages. But how this works without those special offline checks ?

Share Improve this question asked Sep 15, 2015 at 6:39 ShabeelShabeel 752 silver badges9 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

Yes, there is an 'offline' buffering for packages to be emitted before the first connect, see here the implementation of socket.js yourself:

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

(especiall check onconnect and emitBuffered functions/attribs)

I solved this problem with this little change on reconnecting:

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

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

  ...
});

By setting the sendBuffer to an empty array you avoid sending the packages again on reconnect. Of course you should then handle the sending attempts on your own.

发布评论

评论列表(0)

  1. 暂无评论