在网络游戏开发中,通讯协议是一个无法被避免的问题,无论对于客户端开发中还是服务器开发程序猿而言,制定一个合适的通讯协议是很有必要的
游戏联网需求有弱联网游戏,即时互动类游戏
选择通讯协议的时候主要关注于延迟低,易用,低成本等
下面对比TCP,UDP,HTTP,WebSocket 四种协议优缺点、特性
1. TCP:
优点: 可靠性 、全双工协议、开源支持多、应用较广泛、面向连接、研发成本低、报文内容不限制(IP层自动分包,重传,不大于1452bytes)
缺点:
- 操作系统:较耗内存,支持连接数有限、
- 设计:协议较复杂,自定义应用层协议、
- 网络:网络差情况下延迟较高、
- 传输:效率低于UDP协议
特性: 面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、适用于二进制传输
2. UDP
优点:
- 操作系统:并发高,内存消耗较低、
- 传输:效率高,网络延迟低、传输模型简单,研发成本低
缺点:
- 协议不可靠、单向协议、开源支持少、报文内容有限,不能大于1464bytes、
- 设计:协议设计较复杂、
- 网络:网络差,而且丢数据报文
特性:无连接,不可靠,基于IP协议层,OSI参考模型位于传输层,最大努力交付,适用于二进制传输
3. HTTP:
优点: 协议较成熟,应用广泛、基于TCP/IP,拥有TCP优点、研发成本很低,开发快速、开源软件较多,nginx,apache,tomact等
缺点: 无状态无连接、只有PULL模式,不支持PUSH、数据报文较大
特性: 基于TCP/IP应用层协议、无状态,无连接、支持C/S模式、适用于文本传输
相关阅读:
4. WebSocket
优点:协议较成熟、基于TCP/IP,拥有TCP优点、数据报文较小,包头非常小、面向连接,有状态协议、开源较多,开发较快
缺点:没发现啥缺点
特性:有状态,面向连接、数据报头较小、适用于WEB3.0,以及其他即时联网通讯
相关阅读:
5. 协议选择
通过以上对协议特性分析,我想大家心里已经有底儿了。建议:
对于弱联网类游戏,必须消除类的,卡牌类的,可以直接HTTP协议,考虑安全的话直接HTTPS,或者对内容体做对称加密;
对于实时性,交互性要求较高,且team有过相关经验,可以优先选择websocket,其次TCP协议;
对于实时性要求极高,且可达性要求一般可以选择UDP协议;
局域网对战类,赛车类,直接来UDP协议吧(公网对战,P2P的UDP还得“打洞”处理)
本文转自: 阳仔原创