2016-08-28 2 views
0

Я пытаюсь отправить сообщение с сервера NodeJS к клиенту, используя Socket.ioОтправка сообщений от сервера к клиенту socket.io

Однако, я нашел такую ​​же практику во всем Интернете, который обертывание Emit с io.on («соединение», обработчик), а затем сделать сервер прослушивает специальный «канал» событие так:

var io = require('socket.io')(); 

var socketioJwt = require('socketio-jwt'); 
var jwtSecret = require('./settings').jwtSecret; 

var User = require('./models/users').User; 

io.set('authorization', socketioJwt.authorize({ 
    secret: jwtSecret, 
    handshake: true 
})); 

var sockets = []; 

io.on('connection', function(socket) { 
    sockets.push(socket); 
}); 

sendLiveUpdates = function(gameSession) { 
    console.log(sockets); 
} 

exports.sendLiveUpdates = sendLiveUpdates; 

exports.io = io; 

Моей проблема: Я хочу, чтобы испустить сообщения вне этого на соединительной оболочке, например, из мои маршруты или другие скрипты. Является ли это возможным?

Спасибо.

+0

См. Также: http://stackoverflow.com/a/11356019/362536 – Brad

ответ

1

Да. Вам просто нужно сохранить ссылку на сокет.

// Just an array for sockets... use whatever method you want to reference them 
var sockets = []; 

io.on('connection', function(socket) { 
    socket.on('event', function() { 
    io.emit('another_event', message); 
    }); 

    // Add the new socket to the array, for messing with later 
    sockets.push(socket); 
}); 

Потом где-то в вашем коде ...

sockets[0].emit('someEvent'); 

То, что я обычно делаю это назначить новым клиентам UUID и добавить их к объекту шпонкой этим UUID. Это полезно для ведения журнала, и что не так хорошо, поэтому я постоянно поддерживаю идентификатор.

+0

На самом деле я сделал именно то, что вы предложили, но я продолжаю получать пустой массив, и я не знаю, почему. Это мой код: 'var sockets = []; io.on ('соединение', функция (розетка) { \t \t вар = идентификатор пользователя socket.client.request.decoded_token.id; \t \t // сохранить пользователя в БД \t \t sockets.push (socket.id); \t }); sendLiveUpdates = функция (gameSession) { \t \t \t console.log (розетки); \t } exports.sendLiveUpdates = sendLiveUpdates; ' Я экспортирует функцию sendLiveUpdates и использовать его где-то в моем сценарии. – georgehelou

+0

@georgehelou Вы должны были поставить этот код в свой вопрос тогда ... – Brad

+0

Я только что редактировал свой вопрос. PLZ сказать мне, что я делаю неправильно @Brad – georgehelou