簡體   English   中英

調用在回調中定義的函數

[英]Calling a function defined inside a callback

我在理解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()

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

這取決於您想吸引哪些客戶。 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');
      }
    });
  };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM