2015-04-01 3 views
0

Я работаю с сервером Socket.io, и я пытаюсь получить доступ к сокету, который выдает событие от клиента.Как получить доступ к целевому сокету в обработчике Socket.io

Там же этот пример в документации:

socket.on('private message', function (from, msg) 
{ 
    console.log('I received a private message by ', from, ' saying ', msg); 
}); 

Попытка использовать это, я заметил, что параметр порядка изменилось в последней версии и «от» параметр фактически является функцией.

У меня возникли проблемы с этим, чтобы получить информацию о том, кто выбрал событие.

Есть ли другой способ? или, возможно, способ использования параметра для получения информации?

ответ

2

На сервере, ваш код должен быть в затворе, как это, и вы можете получить доступ к родительскому аргументу функции, который содержит гнездо:

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 

    // you can access the argument socket from the parent function 
    console.log(socket); 
    // access the socket id of this socket 
    console.log(socket.id); 

    console.log(data); 
    }); 
}); 

Если вы хотите использовать указанную функцию обработчика, вы можете создать функция заглушки, которая передает сокет в функцию названного обработчика следующим образом:

function myEventHandler(socket, data) { 
    // you can access the argument socket from the parent function 
    console.log(socket); 
    // access the socket id of this socket 
    console.log(socket.id); 
    console.log(data); 
} 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    myEventHandler(socket, data); 
}); 
+0

Спасибо. Я пытался использовать именованные функции в качестве обработчиков, но, я думаю, я сделаю это так. –

+0

@NickTsitlakidis - вы можете использовать именованный обработчик, но вам просто нужно создать функцию заглушки, которая передает сокет именованному обработчику. – jfriend00

+0

Вы имеете в виду что-то подобное? 'socket.on ('мое другое событие', handleEvent); function handleEvent (сокет, данные) {console.log (сокет, данные)} ' –