| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> websocket -> 正文阅读 |
|
[网络协议]websocket |
一 . http与webSocket比较HTTP 无状态:每次连接只处理一个请求,请求结束后断开连接。 无连接:对于事务处理没有记忆能力,服务器不知道客户端是什么状态。 以往实现即时通讯的手段: 轮询:客户端定时向服务器发送 Ajax 请求,服务器接到请求后马上返回响应信息并关闭连接。 长轮询:客户端向服务器发送 Ajax 请求,服务器接到请求后 hold 住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。 长连接:在页面里嵌入一个隐蔵 iframe,将这个隐蔵 iframe 的 src 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。 二 . webSocket简介WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。(航班信息) 为什么需要webSocket 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。 轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 三 . webScoket通信原理和机制以往实现即 webSocket协议Tcp握手阶段是通过http通信完成的,目的是为了更好达到兼容。具体过程是我们在客户端构建一个websocket实例,并且为它绑定一个需要连接到的服务器地址,当客户端连接服务端的时候,会向服务端发送一个类似下面的http报文。 发送信息:
这个就是Websocket的核心了,告诉Apache、Nginx等服务器:发起的是websocket协议。 Sec-WebSocket-Key? 是一个Base64 encode的值,这个是浏览器随机生成的,告诉服务器需要验证是不是真的webScoket请求。 然后服务器会返回下列东西,表示已经接受到请求, 成功建立Websocket啦!
依然是固定的,告诉客户端即将升级的是Websocket协议,而不是其他的。 返回的状态码:
一旦返回的状态码为101,表示客户端和服务端就建立了websocket连接,以后的通信走的都是websocket协议了,一旦建立连接之后,我们就可以进行数据传输了! (1)建立在 TCP 协议之上,服务器端的实现比较容易。 (2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。 (3)数据格式比较轻量,性能开销小,通信高效。 (4)可以发送文本,也可以发送二进制数据。 (5)没有同源限制,客户端可以与任意服务器通信。 (6)协议标识符是 四 . webSocket实现nodejs服务端实现 见demo 客户端的 API4.1 WebSocket 构造函数 (new WebSocket())WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。
执行上面语句之后,客户端就会与服务器进行连接。 4.2?webSocket.onopen实例对象的
?4.3 webSocket.onclose 实例对象的 4.4?webSocket.onmessage实例对象的
4.5 webSocket.send()实例对象的 发送文本的例子。
发送 Blob 对象的例子。
发送 ArrayBuffer 对象的例子。
4.6 webSocket.onerror实例对象的
以下见案例---- |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:49:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |