2017-05-30 21 views
0

我试图实现一个小聊天应用程序,用户可以发送消息到特定的Id或一组Id。我浏览了socketio文档并找到了合适的解决方案。我试过这个功能Socketio广播到选定的socket.id,而不是使用房间和命名空间socket.io

socket.broadcast.to(socketid).emit('message', 'for your eyes only'); 

但它没有工作。

let onlineUsers = []; 
    let sockets = {}; 

    module.exports = function (io,app) { 

     io.on('connection', (socket) => { 

      // Event for user connecting to socket 
      socket.on('online', (data) => { 
       if(data.username!=null){ 
       socket.name = data.username; 
       onlineUsers.push(data.username); 
       sockets[data.username] = socket.id; 
       console.log(data.username+' online'); 
       } 
      }); 

      socket.on('Chat', (data) => { 
       socket.broadcast.to(sockets[data.receiver]).emit('message',data.message); 
       socket.leave(name); 
       console.log('message sent'); 
      }); 

    // Event for user going ofline 
    socket.on('offline',() => { 
     for (var i = 0, len = onlineUsers.length; i < len; i++) { 
      if (onlineUsers[i] && onlineUsers[i].username === socket.name) { 
       onlineUsers.splice(i, 1); 
       delete sockets[socket.name]; 
       socket.broadcast.emit('offline', { 
        username: socket.name 
       }); 
      } 
     } 
     console.log('offline'); 
    });  
} 
+0

但是当你有一个正确的socketid它的工作原理。我使用相同的:) – Lycidias

+0

当它不工作,你需要告诉我/我们你使用的版本,也许“一点”更多的代码;) – Lycidias

+0

@Lycidias我已经更新了我的代码。我需要知道什么时候它不会抛出任何错误,但没有任何反应。 – TRomesh

回答

-1

考虑类似如下:

class Connection { 
     constructor(id, socket) { 
       this.id = id; 
       this.socket = socket; 
     } 
} 

let connections = []; 

socket.on('connection', (socket) => { 
     // Get an id for the user/connection 
     // ... 
     // let id = getID(socket); 

     connections.push(new Connection(id, socket)); 
}); 

let sendToID = (id, message) => { 
     for(let i = 0, len = connections.length; i < len; i++) { 
       if(connections[i].id === id) { 
         connections[i].socket.emit('message', message); 
         break; 
       } 
     } 
}; 

当然,你可以使用多个id以外的东西...但你的想法。

0

我那样做(copiedand改变从生产了一下,希望什么都不重要缺失和它的作品像)

user = []; 

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

    user[socket.id] = socket; 

    //to send to a group of users which fit with criteria whatever 
    socket.on('chatroom1',function(){ 
     socket.join('chatroomONE'); 
     io.to('chatroomONE').emit('connections', count_connections); 
    }); 


    socket.on('disconnect', function(data){ 
     delete user[socket.id]; 
    }); 

    socket.on('messagetosb', function(msg){ 
     var clientid = ""; //here your code to get the client from the users array to whom you want to send a message 
     socket.broadcast.to(clientid).emit('antwort', "message x y z"); 
    }); 

});