Node.js Socket.io、Codeigniter、Redis会话存储创建推送通知

Node.js Socket.io、Codeigniter、Redis会话存储创建推送通知,node.js,socket.io-1.0,Node.js,Socket.io 1.0,我有一个codeigniter应用程序,我想实现推送通知。我使用mysql作为后端数据库,但我使用redis作为会话存储,因此我可以将其用于节点(只是首选项)。当用户连接到节点时,他们通过上的查询参数传递该节点的会话id io.connect('http://123.45.67.89:3434', { query: "sessId="+sessionId }) 在服务器上,我得到如下结果: io.set('authorization', function(handshakeData, acce

我有一个codeigniter应用程序,我想实现推送通知。我使用mysql作为后端数据库,但我使用redis作为会话存储,因此我可以将其用于节点(只是首选项)。当用户连接到节点时,他们通过上的查询参数传递该节点的会话id

io.connect('http://123.45.67.89:3434', { query: "sessId="+sessionId })
在服务器上,我得到如下结果:

io.set('authorization', function(handshakeData, accept) {

    // get user details from redis using the session id sent here

    console.log('User Session Id: ', handshakeData._query.sessId);
    accept(null, true);
});
我能够从redis中获取用户数据,以保存已连接用户的列表

我想在一个数组中保存一个已连接用户的列表,其中包含他们的profile_id和socket.id

client_list[user.profile_id] = socket.id;
所以我可以通过id搜索用户,获取他们的套接字连接id,并向该用户发送一个通知,不管是出于什么原因

我的问题是,我可以在授权事件中发送sessionId,但无法获取socket.id;我可以在连接事件中获取socket.id,但无法在该事件中传递数据

如何在连接到socket.io服务器时发送会话id并获取socket.id


感谢高级:)

事实证明,您可以在连接事件中访问授权事件中发送的查询中的数据,如:

socket.request._query.sessId 
(sessiond是从客户端连接查询发送的自定义密钥,请参见问题以获得澄清)

通过这种方式,您可以从连接事件的查询中捕获users socket.id和数据