Как подключить несколько клиентов socket.io к разным URL в Node.js? - PullRequest
2 голосов
/ 23 марта 2012

Я пытаюсь подключить множество клиентов socket.io для разных URL-адресов в Node.js следующим образом:

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');

})

Если я использую приведенный выше код, сокет не получаетуспешно сохранено в переменную sock в time .Это означает, что я должен сделать setInterval около 1000 .. чтобы строка

sock=socket 

была запущена.

Пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2013

Я использую следующий подход для достижения этой цели:

клиентская сторона:

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

0 голосов
/ 24 марта 2012

Поскольку при каждом запросе к http://localhost:3000/id, вы регистрируете новый обработчик, вы должны делать это один раз, а не при каждом запросе.

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

    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...