我正在尝试在Apostrophe cms 2.x上实现Socket.io
我不知道如何从Express‘
获取服务器对象。如果执行以下操作,则必须在新端口上创建一个新服务器,并且需要在与Express app相同的端口上使用套接字
lib / modules / apostrophe-socket / index.js
module.exports = {
construct: function(self, options) {
var server = require('http').Server(self.apos.app);
var io = require('socket.io')(server);
io.of('/api/v1/io/notifications').on('connection', function (socket) {
console.log("New connection", socket.id);
socket.on('notification', function (data) {
console.log("this is a notification ",data);
});
});
}
};
答案 0 :(得分:0)
看看设置快速应用程序的撇号表达模块。服务器对象可以作为“ .modules ['撇号-表达”] .server到达。这是在启动过程的很晚才建立的,因为一旦建立连接就可以开始进入。访问它的好时机是在app.js中的afterListen:function(err){...}回调中。请注意,如果存在err,则它不会成功侦听,并且由于您提供了afterListen函数,因此您有责任退出。
因此您的代码应如下所示:
// in app.js
afterListen: function(err) {
if (err) {
console.error(err);
process.exit(1);
}
var io = require('socket.io')(apos.modules['apostrophe-express'].server);
}
我们不为afterListen
发出诺言事件是有问题的,因此您只能在app.js
中通过回调来执行此操作,而不是在自己的模块中添加事件监听器会更好地组织代码。但是,您可以从afterListen
在自己的模块中调用一个方法。我们将在此刻开始在初始化中添加一个promise事件。