使用 socket.io 实施撇号 cms

Implementing apostrophe cms with socket.io

我正在尝试在 Apostrophe cms 2.x

上实施 Socket.io

我不知道如何从 express apos 获取服务器对象

如果我执行以下操作,我将不得不在新端口上创建一个新服务器,并且我需要在与 express 应用程序相同的端口上使用套接字

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);
      });
    });

  }
};

查看设置 express 应用程序的 apostrophe-express 模块。服务器对象可以作为 apos.modules['apostrophe-express'].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 发出 promise 事件是有问题的,因此您只能在 app.js 中使用回调来执行此操作,而不是在您自己的模块中添加事件侦听器,这会更好地构建您的代码。但是,您可以从 afterListen 调用您自己的模块之一中的方法。我们将在初始化的这一点上查看添加一个 promise 事件。