Javascript 调用回调函数中定义的函数

Javascript 调用回调函数中定义的函数,javascript,node.js,websocket,Javascript,Node.js,Websocket,我很难理解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); })

我很难理解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');
}

importantEvent()
内部调用
ws.send()
的好方法是什么?

这取决于您希望访问哪些客户端。在
wss.on('connection')…
事件中,函数接收的ws是在此事件中连接到服务器的客户端

由于要向所有连接的客户端发送消息,需要使用


这是您希望访问哪些客户端的问题。在
wss.on('connection')…
事件中,函数接收的ws是在此事件中连接到服务器的客户端

由于要向所有连接的客户端发送消息,需要使用


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

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

我不确定我是否完全理解您的问题。您在调用
ws.send
importantEvent
中遇到了什么问题?@MatthewHerbst这是一个范围问题。ws没有在那里定义。啊。有什么原因不能在可用时将其保存到全局吗?
让wsGlobal;wss.on('connection',function(ws){wsGlobal=ws;…})
如果它有时需要更新,您也只需更新全局,并附加所有事件处理程序,如上的
(“message”
到全局存储为什么不在
连接中创建它呢
事件回调?@Volodymyr这是不可能的,这是由SDK强制执行的,我不确定我是否完全理解您的问题。在
重要事件中调用
ws.send
有什么问题?@MatthewHerbst这是范围问题.ws没有在那里定义。啊。有什么原因不能在它可用后将其保存到全局吗?
让wsGlobal;wss.on('connection',function(ws){wsGlobal=ws;…})
如果有时需要更新,您只需更新全局,并附加所有事件处理程序,如
('message'
到全局保存为什么不在
连接中创建它呢?@Volodymyr这是不可能的,这是由我使用的SDK强制执行的谢谢@javrd,这很有帮助。有没有办法选择一组客户端?每条消息与所有客户端都不相关,我可以要求客户端(以某种方式)这样做)告诉他们需要哪种类型的消息。不确定是否使用此库。使用socketio,您可以在连接事件时将客户端订阅到通道,然后将消息发送到通道,以仅访问您已订阅的客户端。您可以尝试使用我们在此处迭代的客户端对象,通过ID或其他方式对其进行过滤。此外,还可以代码只是github自述文件的复制粘贴,考虑到它可能无法像现在这样工作,您需要对其进行一些处理。谢谢@javrd,这很有帮助。有没有办法选择一组客户端?每条消息都与所有客户端不相关,我可以要求客户端(以某种方式)这样做告诉他们需要哪种类型的消息。不确定是否使用此库。使用socketio,您可以在连接事件时将客户端订阅到通道,然后将消息发送到通道,以仅访问您已订阅的客户端。您可以尝试使用我们在此处迭代的客户端对象,通过ID或其他方式对其进行过滤。此外,还可以is代码只是github自述文件的一个复制粘贴,考虑到它可能不像现在这样工作,您需要对它做一些工作。