本篇的目的是给一些没有网络基础知识的开发者讲解一些网络基础知识,以及一些在游戏开发中的使用的心得。如果文章中有什么问题,希望大佬们细心指正。
TCP/IP协议族。

这个图有个概念就好,想要具体深入了解的可以看一些计算机网络相关的书。比如《TCP/IP协议详解》《计算机网络》等。
这里只介绍一下游戏开发中经常使用到的一些协议。
Tcp:传输控制协议,提供可靠有序的,面向连接的传输协议。
关键字:可靠,有序,面向连接。
tcp能够保证数据包的可靠性和有序,这一切都帮你封装好了。TCP发送一个数据包,等待一段时间,直到检测到数据包丢失了,如果没有接收到它的ACK,接下来就重新发送丢失的数据包到目标计算机。重复的数据包将被丢弃在接收端,乱序的数据包将被重新排序。以此来保证数据包的可靠性和有序性。但为了保证可靠和有序,就要保证TCP无论什么情况,只要数据包出错,就必须等待数据包的重发。
Udp:用户数据报协议,无连接的,不保证有序,不可靠的传输协议。
关键字:不可靠,不保证有序,无连接。但是更快。
UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
Tcp和udp协议都属于传输层协议。
HTTP:超文本传输协议
关键字:基于请求与响应,无状态,明文。
是一个基于请求与响应,无状态的,应用层的协议,是基于tcp实现的应用层协议,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
http是应答式的,客户端发送请求,服务器收到请求之后给予回复。
http是明文的,抓包可以抓到http的具体内容。
https是加密的http协议,抓包不能查看携带内容。https是身披SSL外壳的HTTP。
Websocket:
关键字:保持链接,有状态,可以传输二进制。
由于http是短链接的无状态的,为了弥补http在业务逻辑上的不足,所以websoket出现了。
Websocket是基于tcp协议封装的,可以在浏览器中使用的网络协议。Websocket是可以保持链接的。有状态的。由于是可以保存链接的状态,所以可以服务端主动向客户端推送。
总结一下:
http和https都是短链接,无状态的,一次请求一次回复。
即每次都是客户端创建链接,然后发送一个请求,然后服务端收到这个请求之后,给予一个回复。然后断开链接。
因为都是短链接,所以服务器对于事务处理没有记忆能力,服务器不知道客户端是什么状态。
所以每次客户端请求的时候,会根据数据的敏感性携带相关的验证信息。比如userid,token等。
所以根据短链接和长连接的特性,短链接主要使用在一些不需要保留状态的业务请求上,比如游戏里的商城商品列表,游戏初始化,订单支付等场景。
Websoket和tcp是可以保持链接的,有状态的。可以多次请求,多次回复,也可以服务器主动推送。
Websoket和tcp都是可以保持链接的。
服务端是可以保存用户的状态,每个socket绑定一个userid。用户只需要在创建链接之后,验证一次用户信息就可以了。后面就可以不停的保持这个状态,直到链接断开。
使用场景:数据包交互比较频繁的游戏场景肯定都是长链接的。
Tcp和websocket足够支持大部分网络游戏的业务模型。比如qq斗地主,捕鱼游戏这种。
但是像王者荣耀,还有一些对每秒数据交互帧率要求很高的,一般都是udp封装的可靠连接。
欢迎关注公众号:creator小玉米

或者加入qq群一起交流。群号:1093612606
