Hello 又是我,
背景是这样的,
上回书说到和小伙伴一起做了一个 1v1 小游戏,目前已经在小群体发布了,目前平均每小时也有 3-4 人在线对战了。然后有玩家反应在用蜂窝网络的时候,特别是地铁上,会遇到断线的问题。
服务端对此表现为 socket.poll(read)成功后 socket.available 返回 0,或者 socket.poll(Write)返回 false
基于此小弟要做一个断线重连的机制,问题就来了,目前游戏是 UDP,TCP 双轨制,这是当时一拍脑袋的想法,因为基于状态同步的状态想通过 tcp 发送,但是对客户端每秒采样的移动速度和位置(大概 10-15HZ 频率)采用了 UDP 来发送。
断线重连时目前的想法是要同时判断 socket 是否联通,以及客户端的新的 ip endpoint 是否能回应 UDP 的响应。
然后问题来了, 团队里一直有声音说要弃用 TCP,简单在上层封装一个可靠点的 UDP,这样尤其是在断线重连时要做的逻辑少很多,暂且不说可靠点的 UDP 的工作量的问题,一直听说国内网络运营商对 UDP 包不怎么待见,但是一直不知道是为啥,能请各位说一下网络上盛传已久的国内的 UDP 环境不好的原因是什么么?
当然如果仅仅是个传言(谣言),那就再好不过了。
感谢, zhuzhu
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.