如何获取用户的套接字客户端?

发布于 2024-12-24 19:36:41 字数 2020 浏览 0 评论 0原文

我正在实现一个node.js服务器,它使用socket.io(版本:0.8.7)管理用户之间的双向连接。我使用一个数组来存储还没有聊天伙伴的用户。当用户请求新合作伙伴时,应用程序会在此数组中选择一个用户,然后检查该用户是否仍处于连接状态。这是我的问题:

即使用户仍然处于连接状态,我也无法设法为用户获取套接字客户端。这是我的代码片段:

// An array of users that do not have a chat partner
var soloUsers = [];

var io = sio.listen(app);

io.sockets.on('connection', function (socket) {


    socket.on('sessionStart', function (message) 
    {       
        // Parse the incoming event
        switch (message.event) {

            // User requested initialization data
            case 'initial':
                ...

        // User requested next partner
        case 'next':

        // Create a "user" data object for me
        var me = {
            sessionId: message.data.sessionId,
            clientId: socket.sessionid
        };

        var partner;
        var partnerClient;

        // Look for a user to partner with in the list of solo users
        for (var i = 0; i < soloUsers.length; i++) 
        {
            var tmpUser = soloUsers[i];

            // Make sure our last partner is not our new partner
            if (socket.partner != tmpUser) 
            {
                // Get the socket client for this user
                partnerClient = io.sockets.clientsIndex[tmpUser.clientId];

                // Remove the partner we found from the list of solo users
                soloUsers.splice(i, 1);

                // If the user we found exists...
                if (partnerClient) 
                {
                    // Set as our partner and quit the loop today
                    partner = tmpUser;
                    break;
                }
            }
        }

        ...

我收到以下错误:

partnerClient = io.sockets.clientsIndex[clientId];
                                       ^
TypeError: Cannot read property 'undefined' of undefined

我对 clientId 进行了输出(console.log),它肯定是未定义的。此外,我认为socket.io版本0.8中的API可能已经改变,你不能再使用“clientsIndex”方法了。有谁知道替代品吗?

谢谢!!!

I'm implementing a node.js server that manages bi-connections between users with socket.io (version:0.8.7). I use an array that stores the users that have no chat partners yet. When a user requests a new partner, the app picks a user in this array and then checks to see if the user is still connected. And here's my problem:

I can't manage to get the socket client for the user, even if the user is still connected. Here's a snippet of my code:

// An array of users that do not have a chat partner
var soloUsers = [];

var io = sio.listen(app);

io.sockets.on('connection', function (socket) {


    socket.on('sessionStart', function (message) 
    {       
        // Parse the incoming event
        switch (message.event) {

            // User requested initialization data
            case 'initial':
                ...

        // User requested next partner
        case 'next':

        // Create a "user" data object for me
        var me = {
            sessionId: message.data.sessionId,
            clientId: socket.sessionid
        };

        var partner;
        var partnerClient;

        // Look for a user to partner with in the list of solo users
        for (var i = 0; i < soloUsers.length; i++) 
        {
            var tmpUser = soloUsers[i];

            // Make sure our last partner is not our new partner
            if (socket.partner != tmpUser) 
            {
                // Get the socket client for this user
                partnerClient = io.sockets.clientsIndex[tmpUser.clientId];

                // Remove the partner we found from the list of solo users
                soloUsers.splice(i, 1);

                // If the user we found exists...
                if (partnerClient) 
                {
                    // Set as our partner and quit the loop today
                    partner = tmpUser;
                    break;
                }
            }
        }

        ...

I get the following error:

partnerClient = io.sockets.clientsIndex[clientId];
                                       ^
TypeError: Cannot read property 'undefined' of undefined

I did an output (console.log) of the clientId, and it is definitely indefined. Furthermore, I think the API might have changed in socket.io version 0.8, and you can't use the "clientsIndex" method anymore. Does anyone know the replacement?

Thanks!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淤浪 2024-12-31 19:36:41

最好的办法是跟踪对象中连接的客户端。以下是我实现这一目标的方法:

var clients = {};

io.sockets.on('connection', function (socket) {
  // remember the client by associating the socket.id with the socket
  clients[socket.id] = socket; 
  socket.on('sessionStart', function (message) {
    // get the socket.id of the partner on each message
    var partner = message.from; 
    if (clients[partner]) {
      // check if the partner exists and send a message to the user
      clients[socket.id].emit('message', { from: partner, msg: message });
    }
  }

  socket.on('disconnect', function() {
    delete clients[socket.id]; // delete the client from the list
  });
}

注意:在实际的生产应用程序中,您通常会检查会话数据并将每个客户端与用户名和 socket.id 相关联。

The best thing to do is to keep track of the connected clients in an object. Here's how I would achieve this:

var clients = {};

io.sockets.on('connection', function (socket) {
  // remember the client by associating the socket.id with the socket
  clients[socket.id] = socket; 
  socket.on('sessionStart', function (message) {
    // get the socket.id of the partner on each message
    var partner = message.from; 
    if (clients[partner]) {
      // check if the partner exists and send a message to the user
      clients[socket.id].emit('message', { from: partner, msg: message });
    }
  }

  socket.on('disconnect', function() {
    delete clients[socket.id]; // delete the client from the list
  });
}

Note: In a real production application you would normally check for the session data and associate each client with a username and a socket.id.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文