Вызов функции, определенной внутри обратного вызова - PullRequest
0 голосов
/ 19 октября 2018

Мне трудно понять определения функций в стиле Javascript.

У меня есть сервер Websocket:

var WebSocketServer = require('ws').Server,
wss = new WebSocketServer();

wss.on('connection', function (ws) {
  ws.on('message', function (message) {
    console.log('received: %s from client', message);
  })
  ws.send('hello client');
})

И я хочу отправить сообщение подключенным клиентам, когда другая функцияimportantEvent() называется.

function importantEvent(message) {
  //send message to the connected client
  ws.send('hello client');
}

Как правильно называть ws.send() внутри importantEvent()?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Я использую EventEmitter для подобных вещей, чтобы избежать сильной прочности модуля.

// eventManager.js
const EventEmitter = require('events');
class EventManager extends EventEmitter {}
const eventManager = new EventManager();

module.exports = eventManager;

// websocket.js
var eventManager = require('eventManager');
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer();

wss.on('connection', function (ws) {
...
})

function broadcast(data, filter) {
    wss.clients.forEach( ... // depends on library using to web-socket
}

eventManager.on('my-event', function (arg1, arg2) {
    broadcast({arg1, arg2})
});

// in any other files
var eventManager = require('eventManager');

eventManager.emit('my-event', 'hello', 'world');
0 голосов
/ 19 октября 2018

Вопрос в том, к каким клиентам вы хотите обратиться.В событии wss.on('connection'... ws, полученный функцией, является клиентом, который подключается к серверу в этом событии.

Чтобы отправить сообщение всем подключенным клиентам, необходимо использовать метод широковещания

var WebSocketServer = require('ws').Server,
wss = new WebSocketServer();

function importantEvent(message) {
    // Broadcast to all.
    wss.broadcast = function broadcast(data) {
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send('hello client');
      }
    });
  };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...