Socket.io - 无法停止将所有数据传递给所有客户端

时间:2016-08-15 20:14:40

标签: javascript jquery node.js socket.io

我遇到的问题是我通过节点mysql& amp;从数据库中提取数据通过socket.io表达并传递它......但是我遇到了一个问题。

所有用户都使用相同的数据进行更新,而不是每位用户使用唯一数据。

例如:

如果用户A刚刚登录,他可以看到他所有的帐户详细信息。但是当用户B可以在他看到所有细节后立即登录......但它会更新用户A的详细信息以显示用户B的详细信息。

我正在努力确保用户A只能看到自己的用户B和用户B.

我已经尝试了很多东西来阻止这种情况通过JQuery发生,但似乎无法找到解决方案。

下面我将代码修改为基本示例:

HTML

print(paste("number of objects: ",count))
##[1] "number of objects:  4"

服务器端

<a href=""><span id="id-val">User A</span></a>
<a href=""><span id="user-val"></span></a>

客户端

server = http.createServer(app),
io = require('socket.io').listen(server);

function SQLuserData(userval) {
    connection.getConnection(function (err, connection) {
        connection.query('SELECT val FROM test WHERE name= ?;',
            [userval],
            function (err, rows) {
            var accountval = rows[0]['val'];
            if (accountval) {
                console.log("Val : " + accountval);
                UserVal(accountval);
            } else {
                console.log("Error | Val: " + err);
            }
        });
        connection.release();
    });
}

//Socket.io connection socket
io.sockets.on('connection', function (socket) {
    socket.on('sqluser', function (userval) {
        SQLuserData(userval);
    });
});

//Pass val client side.
function UserVal(accountval) {
    io.sockets.emit("valsocket", accountval);
}

有没有人有任何建议或可能的解决方案?

2 个答案:

答案 0 :(得分:1)

我认为您希望避免向所有连接的用户发布帐户数据,这就是Socket.IO的emit方法所做的事情。客户端向服务器发送GET请求并将帐户详细信息回复给单个客户端可能会更好。

如果您选择通过Socket.IO使用HTTP请求,以下是一些资源:

jQuery GET

Express Respond

答案 1 :(得分:0)

所以基本上你的代码的问题是你没有区分用户。由于您是通过套接字发送数据,因此需要注意发送数据的对象。 您可以使用socketio-auth创建一种身份验证。然后将数据发送为socket.emit(event,data);其中socket是每个用户的单个对象。您还可以使用基于cookie的会话来帮助您。