我目前正在使用 socket.io
在客户端JavaScript文件和Node.js服务器文件之间进行事件的发送和接收,但我希望能够在Node服务器及其模块之间进行事件的发送和接收。我的想法是它可能看起来像这样:
Node 服务器:
var module1 = require('./module1');
//Some code to launch and run the server
module1.emit('eventToModule');
module1.emit('moduleResponse', function(moduleVariable) {
//server action based on module response
}
模块文件:
var server = require('./server.js');
server.on('eventToModule', function() {
//module response to server request
}
server.emit('moduleResponse', moduleVariable);
这显然是一个简化版本,但我认为应该有这个功能。我需要将模块文件设置为第二个服务器吗?如果是这样的话,它会是什么样子?
我还尝试过使用 var socket = io.connect('http://localhost:3000');
(这是我用来允许客户端连接到Node服务器的代码)代替 server
并且让 module1
监听和发出 socket
但那也没用。
第二次尝试(仍然不起作用):
server.js
//other requirements
var module1 = require('./module');
const EventEmitter = require('events');
var emitter = new EventEmitter();
io.on('connection', function(client) {
client.on('emitterTester', function() {
emitter.emit('toModule');
emitter.on('toServer', function() {
console.log("Emitter successful.");
});
});
});
module.exports = emitter;
模块.js
var server1 = require('./server');
const EventEmitter = require('events');
var emitter = new EventEmitter();
emitter.on('toModule', function() {
console.log("Emitter heard by module.");
emitter.emit('toServer');
});
module.exports = emitter;
同时,当我尝试使用server1.on
时,我收到了消息server1.on不是一个函数
。
module.exports
),但是看起来你没有从server.js导出EventEmitter,然后在module.js中使用该特定的eventEmitter实例。请参考我的代码示例如何做到这一点。 - jfriend00.emit()
。由于你创建了两个发射器,你需要在另一个发射器上调用.emit()
(即另一个模块正在监听的那个)。在module.js中,将emitter.emit('toServer');
更改为server1.emit('toServer');
,并相应地更改server.js中的代码。我还看到你在这里有一个循环依赖关系,每个模块都需要另一个模块并在其初始化中使用模块句柄 - 我不确定node.js如何处理它。 - jfriend00