美文网首页工作生活
Node.js+Websocket配合Redis消息订阅实现消息

Node.js+Websocket配合Redis消息订阅实现消息

作者: 胥晓冬 | 来源:发表于2019-07-01 17:53 被阅读0次

需求场景:

有5部电梯,物联网部门采集了电梯的楼层、运行方向的数据,并将变化值通过Redis消息发布的方式发布出来;需要开发一个后端服务程序,实现订阅Redis的消息,并将变化值推送给Websocket直连的终端。

场景分析:

这种场景中,无需确认终端的信息,因此做简单的认证即可。

之前一直考虑使用Python的Websockets组件实现,使用过程中发现Redis的消息接收很难与Websockets的连接相互协调。

后来发现Node.js的异步回调能力很强,实现起来比较简单。因此转而使用Node.js实现。

使用Node.js实现的时候,最先使用"socket.io"模块做,Html的客户端用WebSockets连接服务器,直接提示"Connection closed before receiving a handshake response",无法解决。

直到后来,采用了nodejs-websocket模块。定义事件,连接和并行发布都很顺利,圆满实现需求。


```

const authKey = "XXXX";

const serverPort = 8080

console.log("websocket Initalizing on ", serverPort, " ...")

var webs = require("nodejs-websocket");

var server = webs.createServer(function (conn) {

    console.log("New connection main...")

    conn.on('text', function (str) {

        if(str==authKey){

            console.log("Accecept Agent:" + conn.key);

        } else {

            console.log("Unaccecept Agent:" + conn.key);

            close.close();

        };

        //console.log(server.connections);

    });

    conn.on("close", function (code, reason) {

        console.log("Connection Close:", code, reason);

    });

    conn.on("error", function (code, reason) {

        console.log("Connection Error:", code, reason);

    });

}).listen(serverPort);

console.log("websocket Initalized success.")

//redis监听消息的客户端

console.log("redis Initalizing...")

var redisClient = require("redis").createClient(6379, "127.0.0.1"); 

var redisMsgChannel = 'liftstatus'

redisClient.subscribe(redisMsgChannel);

redisClient.on('message', function(channel, data){

    console.log('Got a redis message', channel, data);

    if(channel == redisMsgChannel){

        //var data = JSON.parse(data);

        server.connections.forEach(function (conn) {

            console.log("Sending text to:", conn.key)

            conn.sendText(data)

        })

    }

});

console.log("redis Initalized success.")

```

相关文章

  • Node.js+Websocket配合Redis消息订阅实现消息

    需求场景: 有5部电梯,物联网部门采集了电梯的楼层、运行方向的数据,并将变化值通过Redis消息发布的方式发布出来...

  • redis订阅消息实现

    redis版本需要 >= 2.8参考:https://blog.csdn.net/qq_38157006/arti...

  • redis实现消息发布订阅

    redis只能支持简单的消息发布订阅,如果消息订阅需求复杂,可以选择其他MQ进行整合。

  • 最通俗易懂的Redis发布订阅及代码实战

    发布订阅简介 除了使用List实现简单的消息队列功能以外,Redis还提供了发布订阅的消息机制。在这种机制下,消息...

  • redis消息订阅

    学过观察者模式吗? 就是那种东西 方括号中的是参数 命令: 可以一次性订阅多个频道 先订阅后发布 貌似用的很少 实...

  • redis订阅发布示例

    下面的代码使用redis实现订阅/发布。 在redis中可以同时订阅多个频道,如果有消息发布是redis会发出通知...

  • Redis高级知识

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(...

  • Redis学习(四)发布订阅

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(...

  • Redis 发布订阅

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(...

  • redis 发布和订阅的php应用(异步任务处理)

    Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(...

网友评论

    本文标题:Node.js+Websocket配合Redis消息订阅实现消息

    本文链接:https://www.haomeiwen.com/subject/qdjncctx.html