Node-RED WebSocket使用心得(包含客户端和服务端)
发布日期:2021-06-30 10:11:35 浏览次数:3 分类:技术文章

本文共 3507 字,大约阅读时间需要 11 分钟。

具体概念不描述,只讲使用。

Server

WebSocket的服务端不仅可以进行接收信息,还可以主动发送。

分为in与out模块,选择的模式都是监听,即部署之后创建服务。编辑如下:

WebSocket in 模块:

in服务端接收所有的客户端发送的消息。

WebSocket out 模块:

out服务端则发送消息到指定的客户端或者全部客户端。

互相连接,即完成一个基础的服务端:

WebSocket out模块的深入

需要注意的是WebSocket Out模块发送消息是分为两类的。

一类是其他模块如Dashboard等触发的发送消息事件;

一类是由WebSocket In节点的消息触发的发送消息事件。

第一类会自动发送到所有的客户端。

即类似一个基础的触发节点,会将消息发送给所有连接的客户端:

第二类即如果到达此节点的消息是从WebSocket In节点开始的,则该消息将发送回触发流程的客户端;如果
想要发送给全部客户端,则需要将msg._session属性删除。

上面介绍的最简单的服务端就是直接将消息发送回触发的客户端:

而发送到全部的,需要添加一个函数:

函数内容也很简单:

Client

分为in与out模块,选择的模式都是连接,即部署之后自动连接服务

WebSocket in模块:

in客户端接收服务器发送的消息。

WebSocket out模块:

out客户端将消息发送到服务器。

简单就可以做出一个例子来:

代码:

[{"id":"a77b18bd.aec008","type":"websocket in","z":"36d77686.7da01a","name":"","server":"9cb2406a.8026b","client":"","x":520,"y":860,"wires":[["f6327eca.1bbf"]]},{"id":"f6327eca.1bbf","type":"websocket out","z":"36d77686.7da01a","name":"","server":"9cb2406a.8026b","client":"","x":1080,"y":860,"wires":[]},{"id":"274fc3e2.c65b0c","type":"comment","z":"36d77686.7da01a","name":"Server","info":"","x":490,"y":800,"wires":[]},{"id":"77c685c2.81362c","type":"websocket out","z":"36d77686.7da01a","name":"","server":"","client":"3a960f68.dfb54","x":940,"y":440,"wires":[]},{"id":"ee1eea5f.e20708","type":"websocket in","z":"36d77686.7da01a","name":"","server":"","client":"3a960f68.dfb54","x":660,"y":580,"wires":[["b82105d2.b1f328"]]},{"id":"6cf0e26a.4f826c","type":"inject","z":"36d77686.7da01a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"AAA\":\"123\"}","payloadType":"json","x":610,"y":440,"wires":[["77c685c2.81362c"]]},{"id":"b82105d2.b1f328","type":"debug","z":"36d77686.7da01a","name":"client debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":970,"y":580,"wires":[]},{"id":"6aeb203e.711d","type":"comment","z":"36d77686.7da01a","name":"Client","info":"","x":570,"y":320,"wires":[]},{"id":"24960693.d6c2ca","type":"inject","z":"36d77686.7da01a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"AAA\":\"123\"}","payloadType":"json","x":670,"y":960,"wires":[["f6327eca.1bbf"]]},{"id":"b947a0e4.fd80f","type":"function","z":"36d77686.7da01a","name":"","func":"delete msg._session;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":790,"y":820,"wires":[[]]},{"id":"32b9357d.f561ba","type":"comment","z":"36d77686.7da01a","name":"将删除_session属性的函数添加到中间,会群发","info":"","x":820,"y":760,"wires":[]},{"id":"9cb2406a.8026b","type":"websocket-listener","path":"/ws/request","wholemsg":"false"},{"id":"3a960f68.dfb54","type":"websocket-client","path":"ws://localhost:1880/ws/request","tls":"","wholemsg":"false"}]

 

另附Nodejs的一个极为简易的测试用的C/S:

client.js:

//WebSocket实例化var WebSocket = require('ws');var ws = new WebSocket("ws://localhost:1880/ws/request");ws.onopen = function (e) {	//成功连接服务器回调	console.log('客户端(client):与服务器的连接已打开')	//成功就发送消息	ws.send(JSON.stringify("12321312"));}ws.onmessage = function (event) {	//获取服务器发送的消息    console.log("Received Message: " + event.data);};

 

server.js

var WebSocketServer = require('ws').Server,wss = new WebSocketServer({ port: 1880 });//服务端口8181wss.on('connection', function (ws) {    console.log('服务端:客户端已连接');    ws.on('message', function (message) {        //打印客户端监听的消息        console.log(message);		//再发回去		ws.send(JSON.stringify(message));    });});

 

转载地址:https://islet.blog.csdn.net/article/details/116699161 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Node-RED dashboard ui-template 文件获取与保存
下一篇:xcopy的python基础实现

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月13日 18时36分26秒