ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

H5中为什么要有websocket

2021-08-03 10:31:47  阅读:215  来源: 互联网

标签:为什么 websocket 协议 TCP H5 收到 数据包


在线网络游戏,是最重要的游戏形式,

通过互联网,玩家可以一起联网对战,能带来很多的乐趣。

H5微信小游戏,抖音小游戏怎么样做联网对战和传统的有什么不一样的?

首先我们来看传统的联网,我们直接用TCP socket, 而H5的标准里面,我们用的是websocket,今天我们来说一说websocket 到底是什么。

 

 

TCP socket 的代价:

TCP是可靠的传输协议,这个大家都知道,怎么实现可靠的呢?

就是发送端发送一个数据包,接收端回应收到后,再发送下一个,这个是由操作系统 底层来实现的, 这种处理逻辑,会带来一个问题,验证需要代价,底层想等多一点数据,一起发过去。这样会导致我们app 连续发送2个数据包的时候,这两个数据包,底层会有可能一起发出去,接收端会一起收到这2个数据包。

那么这个时候问题来了,对于app而言希望一个一个数据包处理,可是服务端收到了2个黏在一起的数据包,服务器程序也希望收到的是一个一个数据包,

但是实际却收到2个数据包,所以我们一般的做法,是app自己给这个数据包打上标识协议,根据协议方便把2个在一起的数据包分开。

App 做数据包的标识两种方式:

(1) 数据大小size + 数据内容body + 校验;

(2) 数据内容body + 特殊的标识符号(如 );

当我们收到一个2个数据包在一起的时候,解析数据包里面的内容,

先读取第一个数据包的大小,读到数据后,根据大小可以定位下一个数据包的位置,依此类推。你使用TCP Socket ,每个里面都会有类似的协议;

H5 的websocket:

其实每次些拆包封包也挺蛮烦的,所以H5提出了一个标准解决方案,这个方法就是websocket。

(1) websocket 底层基于TCP Socket

(2) websocket 实现了4个协议(相当于自定义拆包,封包协议):

连接握手协议;

关闭协议;

发送数据协议: 包头 + 数据内容;

接收数据协议: 包头 + 数据类容;

这样得到得结果就是

客户端使用websocket 与服务器的websocket来相连接, 客户端使用 ws 来发送数据,服务器,使用websocket协议来接收,接收到的就是用户完整的数据包。自己不用实现拆包,发送数据的时候也不要使用封包了,大大的减少了用户编写网络代码的难度。

Websocket = (TCP socket + 拆包,封包的一个协议)

标签:为什么,websocket,协议,TCP,H5,收到,数据包
来源: https://www.cnblogs.com/bycw/p/15093161.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有