用socket.io实现撇号cms

时间:2018-09-01 00:59:57

标签: node.js socket.io apostrophe-cms

我正在尝试在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);
      });
    });

  }
};

1 个答案:

答案 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事件。