类似游戏数据包的重发,如何设计

aj3423 2013-10-31 01:31:04
举例来说比如<我叫mt>,这游戏刚出来的时候,因为人多服务器很拥挤,登录时候经常是卡在"与服务器通信中..",那时候我想它应该是没有重发包功能,因为不光是登录,游戏里所有动作和界面操作都是这样,一旦卡住就无解,必须重启游戏,用户体验很差。后来大概是代码改进过了,加了重发包功能,虽然有时候也会卡,但"与服务器通信中.."这个框过一会儿会消失,动作会执行成功。

我想问的是,各位有没碰到过这种情况,又是如何设计自己的代码的,或者有没现成的网络库什么的已经考虑到这点了,等等。

举例,如果tcp服务器192.168.1.1,监听8080端口,一旦接收到 "A" 就返回输出一个 "B", 我设计客户端代码时候:
int main() {
tcp x("192.168.1.1", 8080);
x.connect(); //连接可能失败,失败的话需要重试
x.send("a"); //发送可能失败,失败的话需要重新send,但不需要重新connect
h.recv(); //接收可能失败,失败的话需要重新recv,但不需要重新connect/send
}

这个重做的概念不限于网络编程,我想也许可以抽象出一个 do_something_and_retry_on_fail 之类通用的东西,但简单想了下 觉得比较复杂。

请提宝贵建议,谢谢。
...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aj3423 2013-11-01
  • 打赏
  • 举报
回复
有没有哪个比较好的开源项目的例子中用到的
  • 打赏
  • 举报
回复
设置下KeepAlive
oyljerry 2013-10-31
  • 打赏
  • 举报
回复
用一个队列维护失败的请求等,然后周期性发送请求重试
打你屁屁 2013-10-31
  • 打赏
  • 举报
回复
发送心跳包失败就重连
Lordard 2013-10-31
  • 打赏
  • 举报
回复
在通讯时加入传送队列及超时/失败重作的通讯管理模组来处理

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧