具体概念不描述,只讲使用。
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 });//服务端口8181
wss.on('connection', function (ws) {
console.log('服务端:客户端已连接');
ws.on('message', function (message) {
//打印客户端监听的消息
console.log(message);
//再发回去
ws.send(JSON.stringify(message));
});
});