有关服务器协议设计的总结

有关服务器协议设计的总结

下面内容都是经验教训,与大家共勉。

1.      TCP、UDP对比一下吧

a)        TCP

优点

                        i.             按字节流保续

                      ii.             只要连接在,保证到达

                     iii.             详细状态机体现连接状态(可以在各种状态做出不同处理)

1.        断开连接时需要重连或者停止逻辑

2.        对方请求断开进行资源释放

3.        发送阻塞;网络或者对方处理性能导致数据处理无法跟上性能。需要进行发送调整

4.        连接失败;对方没有开启或者对方拒绝连接

                     iv.             自己维护连接

缺点

                      v.             连接消耗系统资源。受限接入客户数

                     vi.             保续和拥塞控制导致发送阻塞,或者服务器缓存溢出

                   vii.             后续数据时效性受前面的数据影响

                  viii.             处理需要进行报文解析和分割,增加包头和长度。无法直接使用

                     ix.             主动断开连接方进入time_wait状态,占用资源

b)        UDP

优点

                        i.             按包分割

                      ii.             各个报文独立,无关。后一个包的时效不受前后报文影响

                     iii.             理论上一个物理机可以有任意个UDP对端

缺点

                     iv.             不保证到达

                      v.             不保证报文间顺序

                     vi.             报文大小将影响丢包概率

                   vii.             连接状态需要上层逻辑控制

2.      协议使用

a)        TCP长连接

                        i.             大量对于位置信息不敏感、操作感不强的游戏

b)        TCP短连接

                        i.             HTTP

                      ii.             一些交互性不强的游戏

c)        UDP

                        i.             坦克世界

d)        TCP+UDP

                        i.             街头篮球战斗只有UDP

                      ii.             龙之谷

                     iii.             地下城与勇士

                     iv.             穿越火线(TCP仅仅进行校验和连接保持)

3.      有关协议的设计

a)        UDP进行位置同步

                        i.             进行半帧同步,使用最新位置进行同步

                      ii.             过大差距进行直接跳动处理

b)        TCP进行关键信息同步

                        i.             开炮

                      ii.             释放技能

                     iii.             开始、结束移动

                     iv.             炮台的结束点

 

预期达到的结果:

         实现游戏中比较平滑的位置同步。不会因为网络抖动产生顿卡和位置失真。使得射击类游戏玩家对于相互位置能够得到最为及时的反馈。

 

对比一下存TCP设计

 

4.      协议设计

a)        对于广播包和多播包要注意爆发性,特别对于TCP协议。对于非阻塞I/O模式很容易产生内存暴涨

b)        注意小包汇聚。Window存在系统软中断瓶颈限制

c)        注意分页。对于可能有数据量的查询注意触发方式和分页协议设计。不然肯定要回炉重造。

d)        对于客户端触发并且有应答的请求,一定要设置CD或者去掉应答。不然可能就是风险点。(客户端Bug或者故意攻击)。

e)        注意客户端拥塞导致的内存上涨

f)         注意连接的频繁切换

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值