1. 安装
npm install faye-websocket
2. 创建文件 server.js,内容如下
var WebSocket = require('faye-websocket'),
http = require('http');
var server = http.createServer();
server.on('upgrade', function(request, socket, body) {
if (WebSocket.isWebSocket(request)) {
var ws = new WebSocket(request, socket, body);
console.log("request come...");
ws.on('message', function(event) {
console.log("message receive...")
ws.send(event.data);
});
ws.on('close', function(event) {
console.log('close', event.code, event.reason);
ws = null;
});
setInterval(() => {ws.send("data");}, 2000); // 定时器,每间隔 2s 发送一个 "data"
}
});
server.listen(8000);
console.log("server start...")
3. 运行该服务
执行 node server.js
4. 编写客户端
在 Chrome 浏览器的 console 里,执行
ws = new WebSocket("ws://localhost:8000");
ws.onmessage = function(event) { alert(event.data); };
5. 结果
可以观察到
客户端每间隔 2s,收到一个 data。
6. 总结
感觉就是两边的 ws 是对应的,都可以通过 send 方法发送数据,然后在 onmessage 回调里面接收数据。
开始我理解成,如果我再在浏览器中创建一个 WebSocket,连接上服务器之后,向服务器发送数据,然后服务器会把数据转发给前一个客户端。实验了一下,前一个并没有接受到数据。其实从 server.js 中的代码也可以看到很清楚,每一个 request 创建了一个 WebSocket 与之对应。