2015-03-25 188 views
1

我目前正在使用socket.io工作,并且我不确定完全了解重新连接的机制。socket.io确保客户端重新连接状态

由于断开连接可能发生在客户端,我想知道如何维护服务器上的套接字状态。我已经知道socket.io-client会尝试自动重新连接,但我想知道是否有可能确保服务器端的套接字状态。

我想到一个基于cookie的会话,例如express,但是我不确定我是否正在采取这种方式。我应该考虑另一种解决方案吗?

为了记录,我成功地将HAProxy配置为基于cookie的粘滞会话机制。是否有可能将此机制与socket.io服务器上的cookie会话混合?

感谢

威廉

+0

需要持续哪些状态信息? – gregnr 2015-03-25 01:34:52

+0

套接字的房间列表以及来自mongo数据库的userId。 – 2015-03-25 01:45:01

+0

该信息已存储在每个套接字的服务器端,并且可以随时访问。它仍然不明显,你实际上正在试图解决什么问题。 – jfriend00 2015-03-25 01:45:46

回答

0

我认为基于Cookie的会话是你最好的选择。看看session.socket.io模块。看起来它是专门为此设计的。

var SessionSockets = require('session.socket.io'); 
var sessionSockets = new SessionSockets(io, sessionStore, cookieParser); 

sessionSockets.on('connection', function (err, socket, session) { 

    //your regular socket.io code goes here 
    //and you can still use your io object 

    session.foo = 'bar'; 
    //at this point the value is not yet saved into the session 

    session.save(); 
    //now you can read session.foo from your express routes or connect middlewares 

}); 

或者你也可以实现自己使用表达你提到的会议。我不知道有任何与HAProxy集成的简单方法。

+0

嘿!你认为它可以与非浏览器客户端合作吗,比方说节点客户端? – 2015-03-25 02:04:12

+0

不是没有一些工作。 Cookie通过HTTP握手中的标头传递,Node的socket.io-client似乎不支持修改这些标头。如果您确实需要非浏览器客户端,那么最简单的解决方案可能就是在连接时监听来自客户端的事件,以便传递会话信息。或者,您可以通过查询字符串传递它。看[这个答案](http://stackoverflow.com/questions/13745519/)。 – gregnr 2015-03-25 02:27:04

相关问题