websocket server client 编写
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了websocket server client 编写相关的知识,希望对你有一定的参考价值。
websocket server client 编写
根据RFC文档编写
从网络七层开始,写出一个简单的 echo server 以及 客户端,使用c++语言。后随着应用的丰富,把服务器变成了flv server,从rtsp协议接收直接转成flv server,websocket server直接使用协程处理,接收和发送二进制flv h264 和 aac的音视频数据,等测试完成将会开源,可以留意我的文章。
网络七层简单介绍
RFC 6455 请自行查阅文档:
- 表示层 ,websocket 在前端和后端传输可以使用文本和二进制,二进制比如图片,视频;
- 会话层 这一层没什么好说的,一个链接一个session,可以在服务器端用四元组表示当前所有的链接;
- 应用层,这一层就是根据RFC 6455 文档来;
- 传输层 使用TCP,tcp名为传输控制协议,很多人即使学过计算机网络这本书,也对tcp这三个字理解不透彻;
- 网络层 也就是IP 层 一个IP包最大为多少?
- 数据链路 略
- 物理层 略
websocket 的好处
不言而喻,http协议大家都知道为短链接协议,当然,它可以保活,但没有新协议websocket 那么简洁好用,否则也不用创建websocket了,假定不考虑服务端,利用web 浏览器去建立一个链接是相当容易的,而且最大的好处是,websocket协议帮你解决了粘包问题,这是很多人头疼更有可能不懂的问题,刚毕业的学生或是经验不足的程序员可能也不清楚,这是传输层的问题,首先请先理解tcp和udp 的英文。
1. tcp Transmission Control Protocol 传输控制协议,流式协议
2. udp User Data Procotol 用户数据包协议,RTP这种半传输层协议一般使用UDP,注意是一般,因为RTP
是可以用TCP的,为了加快传输效率,http3 可能使用udp,像srt协议就是使用udp协议。
http协议之所以在开始时使用tcp就是因为文件的发送不能随意丢包,否则页面无法渲染,文件保存也可以不全,那就失去意义了。
传输层
tcp 和 udp前面讲过了,传输层两大协议就是tcp和udp , 在传输层上,tcp是可以进行重传的,而udp不能,udp
在webrtc里面使用dtls协议来保证安全, 之所以讲这么多,1是可以补充基础知识,2是将来很 有可能http协议
建立在udp之上。udp受mtu的影响,也就是最大传输单元的影响。一般mtu为1500字节以内,如1460字节,这个
1460字节是可以计算出来的,很神奇,理解IP协议和udp协议就可以算出来很多人为什么用1460。
websocket应用层协议
最重要的是理解协议,RFC文档是描述协议的描述文本,要深究就要好好读RFC文档。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
以上是关于websocket server client 编写的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WebSocket 在 UWP Client 和 Java Server 之间进行通信?
websocket通信 实现java模拟一个client与webclient通信