websoket

308 阅读2分钟

一开始入行就听过websocket,但工作中一直没有用到过,也没想着去研究,最近想把这个搞清楚,参照了阮一峰的websocket教程和H5的菜鸟课程。总之原理算是理清了。如果没接触过,一直觉得很复杂。沉下心研究,websocket算是比较容易理解的了。以下是我的笔记总结。

Websocket 是一种全双工的通讯协议。

所谓全双工是指通讯双方都可以再任意时刻向另一方发送数据(双方指的是客户端和服务端)

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

特点:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

下图是http(一问一答)和websocket(握手成功,服务端可一直对客户端输出) 通讯过程。


Websocket 通讯具体过程(客户端实现)

WebSocket的握手使用HTTP来实现,客户端发送带有Upgrade头的HTTP Request消息。服务端根据请求,做Response。




客户端具体操作过程:(也可参照h5菜鸟课程实例)

var ws = new WebSocket("wss://echo.websocket.org");

ws.onopen = function(evt) {
console.log("Connection open ...");
ws.send("Hello WebSockets!");
};

ws.onmessage = function(evt) {
console.log( "Received Message: " + evt.data);
ws.close();
};

ws.onclose = function(evt) {
console.log("Connection closed.");
};