websocket 协议简述
WebSocket 是一种网络通信协议,RFC 6455 定义了它的通信标准,属于服务器推送技术的一种
由于 HTTP 无状态、无连接、单向通信的特性,导致 HTTP 协议无法实现服务器主动向客户端发起消息,服务端的状态变化无法即时通知到客户端
WebSocket 连接允许客户端与服务端之间进行全双工通信,只需要一次建立连接就可以一直保持状态,避免了多次 HTTP 连接造成的浪费

基于多线程或多进程的服务器无法适用于 WebSocket ,因为它旨在打开连接,尽可能快的处理请求,然后关闭连接。任何实际的 WebSockets 服务端都需要实现一个异步服务器
简述
WebSocket 兼容 HTTP ,默认端口也是 80 和 443,握手阶段采用 HTTP 协议
协议标识符是 ws (如果加密则为 wss),服务器网址就是 URL

WebSocket 握手
Client request
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
在 HTTP 的请求 header 中增加如下字段,表示发起的是 WebSocket 协议
Upgrade: websocket
Connection: Upgrade
另外这几个字段分别表示
Sec-WebSocket-Key base 64 编码的随机值,用于防止代理 server cache 重新发送 WebSocket 请求
Sec-WebSocket-Protocol 用户定义的串,表示所请求的服务
Sec-WebSocket-Version 协议版本
Server response
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
连接建立成功,切换至 WebSocket 协议
Sec-WebSocket-Accept:经过服务器确认,加密后的 Sec-WebSocket-Key
参考:
WebSocket 是什么原理?为什么可以实现持久连接?-- 知乎
websocket 协议简述的更多相关文章
- Http,Socket,TCP/IP 协议简述
Http,Socket,TCP/IP 协议简述:https://blog.csdn.net/gordohu/article/details/54097841 TCP/IP协议,HTTP协议与webSo ...
- Websocket 协议解析
WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex). 现 很多网站为了实现即时通讯,所用的技术都是轮询(po ...
- WebSocket协议开发
一直以来,网络在很大程度上都是围绕着HTTP的请求/响应模式而构建的.客户端加载一个网页,然后直到用户点击下一页之前,什么都不会发生.在2005年左右,Ajax开始让网络变得更加动态了.但所有的HTT ...
- 初识WebSocket协议
1.什么是WebSocket协议 RFC6455文档的表述如下: The WebSocket Protocol enables two-way communication between a clie ...
- Websocket协议的学习、调研和实现
本文章同时发在 cpper.info. 1. websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机 ...
- python测试基于websocket协议的即时通讯接口
随着html5的广泛应用,基于websocket协议的即时通讯有了越来越多的使用场景,本文使用python中的websocket-client模块来做相关的接口测试 import webclient ...
- Websocket协议之php实现
前面学习了HTML5中websocket的握手协议.打开和关闭连接等基础内容,最近用php实现了与浏览器websocket的双向通信.在学习概念的时候觉得看懂了的内容,真正在实践过程中还是会遇到各种问 ...
- Websocket协议数据帧传输和关闭连接
之前总结了关于Websocket协议的握手连接方式等其他细节,现在对socket连接建立后的数据帧传输和关闭细节总结. 一.数据帧格式 数据传输使用的是一系列数据帧,出于安全考虑和避免网络截获,客户端 ...
- Websocket协议之握手连接
Websocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信的问题而设计的,是完全意义上的Web应用端的双向通信技术,可以取代之前使用半双工HTTP协议而模拟全双工通信,同时克服了带 ...
随机推荐
- Cesium原理篇:Material【转】
https://www.cnblogs.com/fuckgiser/p/6171245.html Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网 ...
- vmWare安装centos7之后使用yum安装提示there are on enabled repos(修改yum源)
可以使用这个命令修改yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.rep ...
- vue-router 使用query传参跳转了两次(首次带参数,跳转到了不带参数)
问题: 在做项目的过程中,使用query传参数,发现跳转过程中第一次有参数,但是路由马上又跳转了一次,然后 ?和它之后的参数都不见了 问题分析: 因为路由加载了两次 解决办法: ·1. 找到总的 la ...
- git clone时报错“Failed to connect to 127.0.0.1 port 2453: Connection refused”如何处理?
1. 查看git的配置 git config --global --list| grep -i proxy 如果有内容输出,那么unset配置项,如: git config --global --un ...
- PHP 范围解析操作符 (::) 主要用于访问静态成员和类常量
范围解析操作符 (::) 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法. 当在类定义之外引 ...
- (转)golang获取当前时间、时间戳和时间字符串及它们之间的相互转换
原文连接: https://blog.csdn.net/skh2015java/article/details/70051512 1.获取当前时间 currentTime:=time.Now() // ...
- 为什么vue组件的属性,有的需要加冒号“:”,有的不用?
https://segmentfault.com/q/1010000010929963/a-1020000010930077 <tab :line-width="2" act ...
- ISO/IEC 9899:2011 条款6.7.10——静态断言
6.7.10 静态断言 语法 1.static-assert_declaration: _Static_assert ( constant-expression , strin ...
- ISO/IEC 9899:2011 条款6.5.3——单目操作符
6.5.3 单目操作符 语法 1.unary-expression: postfix-expression ++ unary-expression -- unary-expression unar ...
- IDEA Git 修改后的文件无法Commit
转自:https://blog.csdn.net/moneyshi/article/details/81298861 因对IDEA使用不熟,在使用和配置GIT的时候,可能哪里配置错误,导致我一直无法使 ...