Javascript 调用回调函数中定义的函数
我很难理解Javascript风格的函数定义 我有一个Websocket服务器: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); })
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自述文件的一个复制粘贴,考虑到它可能不像现在这样工作,您需要对它做一些工作。