Socket.io,Codeigniter,Redis会话存储创建推送通知

时间:2014-07-24 09:55:09

标签: 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, 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?

谢谢你提前:)

1 个答案:

答案 0 :(得分:0)

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

socket.request._query.sessId 

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

这样,您就可以在连接事件上捕获查询中的用户socket.id和数据。