前两篇是严重划水跑题的,这篇是交互篇,算是正片吧。
这篇分三个部分讲
交互流程不是本篇最重要的部分,直接看图
封包协议分析
https://segmentfault.com/a/1190000013298527 WebSocket 协议
https://blog.csdn.net/valada/article/details/98676216 开发者必知必会的 WebSocket 协议
我这边主要以具体示例来分析 准备工作
#客户端
var WebSocket = require('_ws@1.1.5@ws');
var ws = new WebSocket('http://127.0.0.1:19999/');
#服务端
var WebSocketServer = require('_ws@1.1.5@ws').Server;
var wss = new WebSocketServer({
port: 19999});
wss.on('connection', function connection(ws) {
ws.send("1111");
});
#源码/_ws@1.1.5@ws/lib/Sender.js
Sender.prototype.frameAndSend = function(opcode, data, finalFragment, maskData, compressed, cb) {
console.log("this._socket.write", data,outputBuffer)
this._socket.write(outputBuffer, 'binary', cb);
};
下面是打印信息
this._socket.write <Buffer 32 34 34 34 04 00 00 00 ff ff 00> <Buffer c1 0b 32 34 34 34 04 00 00 00 ff ff 00>
前面那个是 压缩后的 1111 \color{red}{1111} 1111 后面是真正发送出去的封包数据