TCP心跳包机制,在调试代码时引发的问题

maple_zhj 2013-01-29 01:41:09
背景:使用TCP进行CS开发时,需要判断 是否掉线等等。

目前实现:
简化如下:假设 client端 每秒向 server 发送 一个 心跳包,
而server端 每隔10秒 查询一下,各个 client 最后的 心跳包 时间,
如果某个client超过60秒不心跳,则直接 T掉 此 client.


目前遇到的问题:
正常run的时候,一切正常。
但是当client发现Bug时,你需要使用 VS2010进行 断点单步调试,

重点来了:当我在调试时,所有线程都 暂停下来了,包括 发送心跳包的 线程,因而,服务器就不会接收到 心跳包,因此,如果调试超过了 一定的时间(比如一分钟),此 client 将被 server T掉。

因此,我想知道,是否有人解决过,类似的问题,如何解决?



...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
maple_zhj 2013-01-29
  • 打赏
  • 举报
回复
引用 5 楼 ZIP_xG 的回复:
引用 3 楼 maple_zhj 的回复:引用 2 楼 bdmh 的回复:做一个信息输出,比如输出到控制台,你观察控制台输出,或者写到文件 关键是,假设 服务器在 电脑A,全速运行(release) 而 客户端 现在 VS中 调试着, 不是 单单写 文件 就能解决的。 调试的时候取消超时机制 发布的时候再使用
首先,谢谢这位兄台。 目前,我也是这个想法,就是在调试的时候,判断处于 IDE状态,通知服务器 不检测心跳, 但是,还是有一种情况,会悲剧。 如果是 使用 VS 或者 winDebug 进行 attach Process 操作, 仍然会 超时, 目前看来,只能 再在服务器上,加两个 按钮, (启用\禁用 心跳包 检测)。 因此,希望 有人 能够 提供 更加优雅的 谢谢。
Kation 2013-01-29
  • 打赏
  • 举报
回复
引用 3 楼 maple_zhj 的回复:
引用 2 楼 bdmh 的回复:做一个信息输出,比如输出到控制台,你观察控制台输出,或者写到文件 关键是,假设 服务器在 电脑A,全速运行(release) 而 客户端 现在 VS中 调试着, 不是 单单写 文件 就能解决的。
调试的时候取消超时机制 发布的时候再使用
maple_zhj 2013-01-29
  • 打赏
  • 举报
回复
自己再顶 一下。
maple_zhj 2013-01-29
  • 打赏
  • 举报
回复
引用 2 楼 bdmh 的回复:
做一个信息输出,比如输出到控制台,你观察控制台输出,或者写到文件
关键是,假设 服务器在 电脑A,全速运行(release) 而 客户端 现在 VS中 调试着, 不是 单单写 文件 就能解决的。
bdmh 2013-01-29
  • 打赏
  • 举报
回复
做一个信息输出,比如输出到控制台,你观察控制台输出,或者写到文件
Kation 2013-01-29
  • 打赏
  • 举报
回复
引用 楼主 maple_zhj 的回复:
本帖最后由 maple_zhj 于 2013-01-29 13:41:58 编辑 背景:使用TCP进行CS开发时,需要判断 是否掉线等等。 目前实现: 简化如下:假设 client端 每秒向 server 发送 一个 心跳包, 而server端 每隔10秒 查询一下,各个 client 最后的 心跳包 时间, 如果某个c……
无法解决,取消超时机制

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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