【问题标题】:node.js and socket.io - how to keep data flowing from connected to new connected users?node.js 和 socket.io - 如何保持数据从连接到新连接的用户?
【发布时间】:2013-12-29 23:20:31
【问题描述】:

我有以下简单的服务器:

var io = require('socket.io').listen(1234);

io.sockets.on('connection', function (socket) {
    // Incoming
    socket.on('this_user_data', function (data) {
        console.log(data);
        // Outgoing (to all but socket)
        socket.broadcast.emit('other_user_data', data);
    });
});

和客户:

            var socket = io.connect('', {port: 1234});

            // Incoming
            socket.on('other_user_data', function(data) {
                console.dir(data);
            });

            // Outgoing
            socket.emit('this_user_data', { my : 'data' });

这非常有效。已连接用户获取新连接用户的 my_data。

但是新用户对已经连接的用户一无所知。

如何将数据流向新连接的套接字?

【问题讨论】:

    标签: ios node.js sockets


    【解决方案1】:

    一种解决方案是让服务器向已连接的用户发出一个新用户刚刚连接的事件,然后他们都回复他们的数据,然后发送给新用户,但更简单的解决方案是存储用户数据当他们连接时,所以当一个新用户连接时,所有用户的数据都只是一个数据库查询。

    【讨论】:

    • 在那种情况下,我必须跟踪数据库中的离线在线用户。所以我会写分配给数据库。
    • 我喜欢你的提议,创建起来不会太难。只是它会重载 node.js 吗?
    • 在用户与套接字服务器断开连接时,使用断开连接事件删除用户。您可以将用户数据存储在一个数组中(足够简单),但是如果您扩展(集群、更多物理服务器),这将限制您。如果您不想在连接时存储用户的数据,请尝试我推荐的第一种方式。超载?疑。您希望有多少人同时使用您的聊天功能?
    • 我想构建一个小型多人游戏进行练习,我计划免费玩无登录等,以及基于sql的用户登录部分。所以基本上我想使用你的两个建议:) 我想到了你描述的两种方式,我只是确保没有其他更奇怪的方式,因为节点和套接字对我来说太新了。
    【解决方案2】:
    1. 将所有用户的数据保存在内存(或数据库)中。
    2. 当新客户端连接时,发出事件以检索其他用户的数据。就像这样:

    客户:

    socket.emit('retrieve-other-users-data', {/* SOME DATA */}, function (responseData) {
      // DO SOMETHING WITH responseData
    })
    

    服务器:

    io.sockets.on("connection", function (socket) {
      socket.on("retrieve-other-users-data", function (requestData, callback) {
        var otherUsersData = getOtherUserData();
        callback(otherUsersData);
      });
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 2011-09-25
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多