使用socket io同时为多个用户提供服务的实际方法是什么?

时间:2013-01-15 21:37:29

标签: node.js webserver express websocket socket.io

我想在许多用户组之间建立实时连接,我是服务器端脚本的新手.........我想向某些用户发送某些消息(数据),现在我的问题是如何为所有用户提供相同的套接字或为不同的用户或不同的任务设置不同的套接字连接。

目前我只是使用单个套接字并以这种方式为用户提供服务。这不是真正的应用程序,它只是我将要做的原型:

var io = require('socket.io').listen(server);
server.listen(http_port);

var allUsers=[];
var num=1;
io.sockets.on('connection', function (socket) {    
var user = 'user#'+num++;
allUsers[user] = socket;
socket.on('message',function(data){
    if(data.to)
        allUsers[data.to].emit("message",{msg:data.msg,by:data.by});
    });
});

客户端:     


    socket.emit('message',{to:'user#1',from:'talha',msg:'hello'});
    
也许,我的方法是错误的,因为稍后我将查询数据库将这些结果发送给特定客户,我该如何管理。 请提供一些代码详细信息以及您的anwers ..提前致谢。

1 个答案:

答案 0 :(得分:1)

不,你只有一个监听套接字。在每个连接上(从io.sockets.on('connection', function(socket){..可以看到),您的function(socket){....}被调用,该函数中的套接字与每个连接/用户相同。 "connection"事件的函数回调是独立的,每个用户都有一个回调。

修改 对于用户分离用户,您可以执行以下操作:

var users = [];
io.sockets.on("connection", function(socket){
   socket.on("message", function(data){
        // Handle if it is a valid user, make some authentication and have a username..
        users[username] = socket;
        // on another message, if you want to send message  
        users["myuser"].send(...)
   }

});