Node.js用于重新连接的客户端的唯一标识符

时间:2013-11-02 21:33:54

标签: javascript node.js express socket.io

我正在尝试为失去连接的客户端构建重新连接过程。在客户端js中,我可以检测何时连接丢失并定期尝试重新连接到服务器。当我重新连接时,服务器将使用新的套接字。

在客户端,这是我的重新连接逻辑

var socket = io.connect(ip, {
  'reconnect': true, //will create a new socket on the server
  'reconnection delay': options.retryInterval,
  'max reconnection attempts': 10
});

socket.on("disconnect", function() {
   this.connected = false;
   this.autoretry();
});

//establish the connection - similiar to the reconnect method
socket.emit("connect", this.options);

//....
autoretry: function() {
    if(this.connected) {return;};
    var next = this.__retry *= this.options.retryScalar;
    this.socket.emit("retry", this.connect.options);
    return _.delay(this.autoretry, next, this);
}

问题是每个客户端都有自己的tls连接到外部服务器,我想在短时间内保持此连接打开;等着看客户是否重新连接。

是否有一种在节点中唯一标识客户端的好方法,还是应该在客户端上创建标识符并将其传递给服务器?

1 个答案:

答案 0 :(得分:1)

为了识别您的客户,应该使socket.io使用expressjs Sessions,每个会话都有一个唯一的ID,并使用许多其他方法向服务器端标识自己,(cookies,header ..)

http://howtonode.org/socket-io-auth

当套接字对象传递给回调io.on('connection',function(socket)时,默认情况下套接字具有唯一的id,socket.id属性访问

为了识别丢失连接的客户端,并且脚本尝试重新连接,请尝试收听reconnectreconnectingreconnect_failed个事件。

https://github.com/LearnBoost/socket.io/wiki/Exposed-events