【问题标题】:Socket.io sending message to specific socket.id not working?Socket.io 向特定的 socket.id 发送消息不起作用?
【发布时间】:2016-01-02 01:49:02
【问题描述】:

我在 socket.io 中使用 node.js 服务器有这个应用程序,我想更新应用程序中连接的每个人的积分。我在 clients 数组中按 socket.id 和 secret 保留了已连接用户的列表。 我试过这样,但积分不会更新。谁能告诉我怎么了?

function updatePoints(){
    points = [];
    pool.getConnection(function(err, connection) {
        connection.query("SELECT * FROM `users`", function(error, rows) {
            for (var i = 0; i < rows.length; i++) {
                points.push({"secret" : rows[i].secret, "points" : rows[i].pontos});
            }
            for (var l = 0; l < points.length; l++) {
                for (var p = 0; p < clients.length; p++) {
                    if(points[l].secret == clients[p].secret){
                        var socketID = clients[p].socket;
                        var pontos = points[l].points;
                        io.sockets.connected[socketID].emit('update points', pontos);
                    }
                }
            }
        });
    });
}

Socket.io 版本:1.3.7

【问题讨论】:

    标签: node.js sockets socket.io


    【解决方案1】:

    如何创建一个客户端对象,然后分配一个套接字和一个点属性,然后将其推送到客户端数组中?

    socketServer.on('connection', function(socket){
         //make your query here
         ...
         //make a client object
         var client = {point: row.point, socket: socket};
         clients[row.secret] = client;
    });
    

    那么您可以通过以下方式检索客户端:

    //query...
    ....
    clients[row.secret].socket.emit('something', function);
    

    编辑:

    如果您想向连接的客户端广播,那么您可以:

    socketServer.emit('something', function);
    

    如果您想向除发出广播的人之外的所有人推广。那么你可以:

    clients[row.secret].broadcast.emit('something', function;
    

    【讨论】:

    • 您可以使用 4 个空格,或者代码块使用 {} 按钮。
    • 但是积分不会在连接事件中更新,而是在用户花费或赚取积分时更新。然后我会为每个人更新积分并发送值,以便他们可以在浏览器中看到它的实时变化
    • @Matt 抱歉,我在移动设备上。很难输入这些东西。等待生病编辑我的答案
    • @John Pangilinan 我发现了我的问题。我使用 jquery 在另一个页面中加载一个页面,并且由于这两个页面具有不同的内容,我在每个页面上都使用了 io.connect(),这使我可以从 2 个不同的套接字进行连接。但是消息被发送到主页一,有没有办法我可以只从两个页面的 1 个套接字连接?
    • 您的问题不清楚。您是在尝试发送消息还是尝试连接?我没有得到“从 1 个套接字连接”部分,你想使用一个套接字吗?
    【解决方案2】:

    替换

    io.sockets.connected[socketID].emit('update points', pontos);   
    

    有了这个

    socket.broadcast.to(socketID).emit('update points', pontos);
    

    【讨论】:

    • ReferenceError: socket is not defined 不知何故客户端没有收到消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2012-07-08
    • 1970-01-01
    • 2020-01-28
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多