如何将多个socket.io客户端连接到Node.js中的不同URL?

时间:2012-03-23 12:29:41

标签: url node.js socket.io

我正在尝试为Node.js中的不同URL连接许多socket.io客户端,如下所示:

app.get('/:id',function(req,res){
io.of('/'+id).on('connection',function(socket){
    socket.emit('hello');

})
});

但这有问题:

例如,当浏览器刷新页面http://localhost:3000/xyz时,事件socket.emit会被触发两次。

如果有人访问页面http://localhost:3000/xyz 10次,则该事件会触发10次。

这不好,因为每次用户访问该页面时,套接字事件将被触发n + 1次。

应该做些什么,以便我可以将套接字注册到不同的URL,同时不会出现这种异常。

另一件事:

如果我这样做:

var sock;

io.of('/'+xyz).on('connection',function(socket){
    sock=socket;

})


app.get('/:id',function(req,res){
    sock.emit('hello');

})

如果我使用上面的代码,则套接字不会成功保存到 time 中的 sock 变量。这意味着,我必须做一个大约1000的setInterval ..所以

sock=socket 

线被解雇。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

因为有了这个,在http://localhost:3000/id的每个请求中,你注册一个新的处理程序,你应该这样做一次,而不是每次请求。

app.get('/:id',function(req,res){
    io.of('/'+id).on('connection',function(socket){
        socket.emit('hello');

    })
});

答案 1 :(得分:0)

我使用以下方法来实现这一目标:

客户方:

var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});

服务器端:

var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
    console.log("url"+socket.handshake.url);
    clientId=socket.handshake.query.clientId;
    console.log("connected clientId:"+clientId);

});

参考:https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization