2016-01-02 68 views
0

我在使用node.js服務器的socket.io中有此應用程序,我想更新應用程序中每個連接的點。我通過socket.id和客戶端數組中的secret保留了一個連接用戶列表。 我試過這樣但點不會更新。誰能告訴我什麼是錯的?Socket.io發送消息到特定的socket.id不工作?

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

回答

1

如何讓客戶對象theb分配插座和點屬性,然後將其推入一個客戶端陣列?

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; 
+0

您可以使用4個空格,或'{}'按鈕的代碼塊。 – Matt

+0

但是在連接事件中這些點不會被更新,但是每當用戶花費點數或贏得它時。然後,我將只爲每個人更新積分併發送價值,以便他們可以在瀏覽器中看到它實時更改 –

+0

@Matt對不起,手機上即時通訊。它很難輸入這個東西。等待生病編輯我的答案 –

0

更換

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

與此

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

'ReferenceError:socket is not defined' 不知何故客戶端沒有收到消息 –

相關問題