我在Express 4服务器上将Primus.io与primus-emit一起使用。

我正在尝试找到一种方法,以将该应用程序的另一个模块挂接到发送/接收的每条消息(包括心跳)中,以便跟踪我的活动用户。 (这是使用Redis排序集完成的)。

由于spark.on('data')没有给我任何东西,因为一切都在通过primus-emit进行,所以我在考虑尝试为此编写自己的Primus插件或中间件,但是我不太想知道如何从packet(在插件中)或req, res(在中间件代码中)到spark。当我在primus.on('connection')中的spark对象上设置accountNumber时。

因此,我要寻找的是服务器端代码,这将使我能够拦截通过主动火花传递的任何数据,只是能够将spark.accountNumber推送到Redis。

PS。也许我会以错误的方式进行操作,因此任何提示都值得赞赏。本质上,我系统的另一部分需要了解活动用户,因此我正在使用Redis。

谢谢!!

最佳答案

因此,我在irc.freenode.net上寻求建议,这是我在#primus上从好伙伴那里得到的建议:不需要任何插件/中间件爵士乐。解决此问题的最简单方法是附加到内部'incoming::data'事件,如下所示:

primus.on('connection', function(spark) {
    spark.on('incoming::data', function(data) {
         // ... update redis set with 'connected' users here
    });

    // ... run all other code related to the spark as per usual here
});

09-25 16:23