在网络游戏开发中,通讯协议是一个无法被避免的问题,无论对于客户端开发中还是服务器开发程序猿而言,制定一个合适的通讯协议是很有必要的

游戏联网需求有弱联网游戏,即时互动类游戏

选择通讯协议的时候主要关注于延迟低,易用,低成本等

下面对比TCP,UDP,HTTP,WebSocket 四种协议优缺点、特性

TCP:

优点: 可靠性 、全双工协议、开源支持多、应用较广泛、面向连接、研发成本低、报文内容不限制(IP层自动分包,重传,不大于1452bytes)

缺点: 操作系统:较耗内存,支持连接数有限、设计:协议较复杂,自定义应用层协议、网络:网络差情况下延迟较高、传输:效率低于UDP协议

特性: 面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、适用于二进制传输

UDP

优点: 操作系统:并发高,内存消耗较低、传输:效率高,网络延迟低、传输模型简单,研发成本低

缺点: 协议不可靠、单向协议、开源支持少、报文内容有限,不能大于1464bytes、设计:协议设计较复杂、网络:网络差,而且丢数据报文

特性:无连接,不可靠,基于IP协议层,OSI参考模型位于传输层,最大努力交付,适用于二进制传输

HTTP:

优点: 协议较成熟,应用广泛、基于TCP/IP,拥有TCP优点、研发成本很低,开发快速、开源软件较多,nginx,apache,tomact等

缺点: 无状态无连接、只有PULL模式,不支持PUSH、数据报文较大

特性: 基于TCP/IP应用层协议、无状态,无连接、支持C/S模式、适用于文本传输

WebSocket

优点:协议较成熟、基于TCP/IP,拥有TCP优点、数据报文较小,包头非常小、面向连接,有状态协议、开源较多,开发较快

缺点:没发现啥缺点

特性:有状态,面向连接、数据报头较小、适用于WEB3.0,以及其他即时联网通讯

协议选择

通过以上对协议特性分析,我想大家心里已经有低儿了。建议:

1、对于弱联网类游戏,必须消除类的,卡牌类的,可以直接HTTP协议,考虑安全的话直接HTTPS,或者对内容体做对称加密;

2、对于实时性,交互性要求较高,且team有过相关经验,可以优先选择websocket,其次TCP协议;

3、对于实时性要求极高,且可达性要求一般可以选择UDP协议;

4、局域网对战类,赛车类,直接来UDP协议吧(公网对战,P2P的UDP还得“打洞”处理)
---------------------

转载自:https://blog.csdn.net/honey199396/article/details/54603860

网络游戏中的协议选择相关推荐

  1. 网游同步技术:实时动作游戏同步方式和传输协议选择

    http://www.gameres.com/478430.html 6 天前 上传 下载附件 (88.33 KB) GameRes游资网授权发布 文 /  韦易笑 实时动作游戏在近年来得到迅猛的发展 ...

  2. 没有mssqlserver的协议_LoadRunner是什么 LoadRunner协议选择原则介绍【图文】

    LoadRunner对不同协议的选择 以前使用Loadrunner只选择过web(Http/Html),但其实协议多种多样.在B/S结构的网站多种业务的特点需要选择不同的协议,耿电在给我们就介绍了用过 ...

  3. timerpickerview使用_详解iOS App中UIPickerView滚动选择栏的添加方法

    1.UIPickerView的宽度和高度是固定的,纵向是320216,横向是568162 2.属性: @property(nonatomic,readonly)NSInteger numberOfCo ...

  4. 再谈网游同步技术:实时动作游戏同步方式和传输协议选择

    如今十年过去,网上越来越多的人开始讨论游戏同步技术了,然而很多文章往往只针对某种特定的游戏情况,而观点又经常以偏概全.很多人并没有真正开发过实时动作游戏,更别说了解同步技术的前世今生了.转载别人的观点 ...

  5. loadrunner之协议选择

    loadrunner  用LoadRunner测试c/s架构的软件,怎样去选择协议,困扰了我很久,看到这篇文章,感觉有点收获,所以特意转了过来,希望对大家有用. 首先,什么是协议? 协议无非就是一个约 ...

  6. 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP

    物联网应用层协议选择和分析--MQTT.CoAP .HTTP.XMPP.SoAP MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早 ...

  7. 直播网络 的协议选择

    转自:http://www.cnblogs.com/ningskyer/articles/5534512.html 上篇我们讲述了如何让直播内容以"最短"路径从主播到观众上,传输层 ...

  8. 状态同步的mmo网络游戏中的帧率

    疑问: mmo网络游戏中, 玩家操作自己A角色在游戏客户端放了1个技能, 游戏服务器收到这个"A放了技能"的指令, 游戏服务器计算这个技能的结果(比如B受到了攻击掉血,A减少魔法值 ...

  9. 使用udp协议实现服务器端程序时,uIP中UDP协议实现的改进

    摘  要: uIP作为一种广泛使用的轻量级嵌入式TCP/IP协议栈,其UDP协议的实现还不够完善,目前最新的1.0版本中仅实现了UDP客户端,尚没有实现UDP服务端.为此,对其进行了以下三方面的改进: ...

最新文章

  1. 意外终止_美国留学本科意外终止怎么办?
  2. python模块-random
  3. Qt Designer下的一些基础操作
  4. Android移动开发之【Android实战项目】漂亮Button样式
  5. iptables学习笔记
  6. 银河麒麟V10入选2020中国十大科技新闻
  7. apache poi使用例_POI 与 JXL 054
  8. Transformer10个重要问题
  9. 关于apppium启动微信,每次都要重新登录的解决方法
  10. python图片x轴数据过多_一个操作证明python数据可视化比excel强百倍:X轴刻度间隔显示...
  11. SVN 错误中文对照
  12. Eclipse版本控制插件Subclipse与Subversive的区别
  13. matlab圆形数据集,Matlab处理SPEI全球数据集
  14. 深度学习开源数据集整理
  15. Codeforces 1016C Vasya And The Mushrooms(动态规划)
  16. linux startx错误,Linux startx命令错误:
  17. 什么耳机适合跑步、分享五款公认最好的跑步耳机
  18. jenkins接入企业微信提醒
  19. java dna框架_DNA - IOC依赖注入 - 组件类库 - JAVA开源项目 - 开源吧
  20. 测井计算机使用的总线,测井数据处理开始步入工作站时代

热门文章

  1. :braintree_Laravel和Braintree:中间件和其他高级概念
  2. 实习工作中的对于ubuntu系统命令使用的一个总结
  3. 计算机IT行业,是否还需要大量程序员呢?
  4. 黑马程序员_设计模式
  5. 分类3:机器学习处理read-wine(红酒)数据集代码
  6. 点击按钮实现文件下载
  7. 用php实现一个简单的爬虫,抓取电影网站的视频下载地址
  8. 手把手教您安装WordPress博客系统初装篇
  9. U盘启动PE 华硕X205TA安装 win10/win8
  10. 怎么用JS端实现图片、视频时直接下载而不是打开预览