websocket协议简介

最近要做一个类似网络实时聊天系统的测试, 问了开发基本是基于websocket实现的, 于是周末花了点时间来了解下websocket协议的相关介绍, 在这里做一个简单的整理与总结.

什么是websocket


在实时通信的场景中(例如实时刷新股票或者聊天室等情况), 如若使用http协议, 在每次更新数据时都需要客户端主动向服务端发起请求, 想想一下这里会有什么缺点?

  1. http请求会带上head信息,head信息头占空间比较大, 传输时占带宽资源;
  2. 服务端无法主动同步数据到客户端;
  3. 客户端必须轮询get服务端数据, 浪费性能, 要么轮询是服务端数据并没有更新,获取不到新数据, 要么服务端数据更新太快, 客户端请求跟不上, 无法做到实时更新;

于是就有了websocket协议, 它就是为了这一类场景而设计的全双工通信协议(客户端与服务端), 只有最一开始的握手需要通过http请求建立tcp通信同道, 而后直接通过websocket协议进行数据传输, 节省了带宽资源以及服务器资源.

其他:

  1. websocket是HTML5一种新的协议.
  2. websocket是应用层协议, 位于传输层tcp协议之上.
  3. websockethttp使用相同的tcp端口, ws开头默认端口为80, wss(SSL加密)默认端口为443.

websocket通信过程


协议分为2个部分, 握手阶段数据通信阶段.
1. 客户端与服务端使用tcp3次握手建立连接, 完成tcp握手阶段
2. 连接成功后, 客户端会通过HTTP/1.1 协议的101状态码与服务器进行握手, 请求如下

GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
Sec-WebSocket-Version: 13

主要是告诉服务端需要使用webscoket协议通信,并告知websocket的版本号, 其中UpgradeConnection字段必须设置要设置, 服务器接受到请求回应如下:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=
Sec-WebSocket-Location: ws://example.com/

以上即表示websocket握手完成.
3. 进行数据通信.

http和websocket的关系


相同点:

  • 都是基于TCP的应用层协议

不同点

  • http协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据
  • websocket是持久化的全双工通信协议, 支持双向发送或接收消息.
  • websocket需要通过http握手建立.

1张图理解http和websocket交互方式, 如下:
这里写图片描述

socket与websocket的关系


实际上, socket并不是协议, 是应用层与tcp/ip协议族通信的中间软件抽象层, 只是tcp/ip协议的封装, 位于应用层和传输控制层之间的一组接口. 通常2台主机通信时, 必须调用socket进行连接, 其底层其实就是tcp/ip协议. 如下图
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值