Websocket 原理
Posted sjbhz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Websocket 原理相关的知识,希望对你有一定的参考价值。
1 > websocket 与http
websocket约定了一种通信规范,通过一个握手机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们的通信。websocket出现之前,web交互一般是基于http协议的短连接或长连接。
补充:http是运行在TCP协议传输层上的应用协议;websocket是通过http协议协商如何连接,然后独立运行在TCP协议传输上的应用协议;websocket仅仅是利用了http协议做连接请求;websocket之所以能持久连接的原因:它运行在TCP协议上,TCP协议自身是长连接协议。
为什么http不是长连接?早期的http在发起每个请求,响应完成后就会关闭Socket,但后来加了多路复用keepAlive协议后http协议已经可以实现长连接。
2> Websocket是什么协议,具有什么优点?
Websocket 是一个持久化的协议,而http非持久的协议;
http的生命周期通过Request来界定,一个request只能有一个response,且response是被动的,不能主动发起;
websocket是基于http协议的,或者说借用了http的协议来完成一部分握手;
websocket协议:双向通信,协议分为2部分:握手阶段、数据通信阶段;
websocket连接服务器的URI以“ws”或“wss”开头, ws开头的默认TCP端口为80,wss开头的默认端口是443;
补充:除了websocket 可实现实时信息传递,还有:
1)ajax轮询:让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息
2)http long poll:long poll 原理跟ajax轮询差不多,都是采用轮询的方式,不过采用的是阻塞模型(客户端发起连接后,如果没消息,就一直不返回Response给客户端,直到有消息才返回,返回完之后,客户端再次建立连接loop)
总结:ajax轮询:需要服务器有很快的处理速度和资源;
long poll :需要有很高的并发,也就是说同时接待客户的能力;
否则 上面2者都会报错:503 Server Unavailable
3> websocket 解决了http的难题:
被动性:当服务器完成协议升级后(http->websocket),服务端就可以主动推送信息给客户端
反复解析http协议,查看indentity info:websocket只需要一次http握手,所以说整个通讯过程建立在一次连接/状态中,也就避免了http的非状态性,服务端会一直知道你的信息,直到你关闭请求。
4>下面的代码片段是打开一个连接,为连接创建事件监听器,断开连接,消息时间,发送消息返回到服务器,关闭连接。
var socket = new WebSocket(‘ws://localhost:8080‘);
// 打开Socket
socket.onopen = function(event) {
// 发送一个初始化消息
socket.send(‘I am the client and I‘m listening!‘);
// 监听消息
socket.onmessage = function(event) {
console.log(‘Client received a message‘,event);
};
// 监听Socket的关闭
socket.onclose = function(event) {
console.log(‘Client notified socket has closed‘,event);
};
// 关闭Socket....
//socket.close()
};
https://www.cnblogs.com/netqq/p/5786750.html
以上是关于Websocket 原理的主要内容,如果未能解决你的问题,请参考以下文章