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 但无法在该事件中传递数据。

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

先谢谢了 :)

4

1 回答 1

0

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

socket.request._query.sessId 

(sessId 是从客户端连接查询发送的自定义键,请参阅问题以进行澄清)

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

于 2014-07-24T11:19:36.793 回答