Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于心跳包的问题 #52

Closed
anheiqq opened this issue Dec 20, 2018 · 3 comments
Closed

关于心跳包的问题 #52

anheiqq opened this issue Dec 20, 2018 · 3 comments

Comments

@anheiqq
Copy link

anheiqq commented Dec 20, 2018

使用版本:5.2.1
TCP心跳包检测机制:
超时间计算公式: KeepAliveTime + (KeepAliveInterval * N)
其中 N为固定值: WinXP以下系统 N=5 ;Win7 以上系统 N=10

使用的相关函数说明:
/* 设置正常心跳包间隔(毫秒,0 则不发送心跳包,默认:30 * 1000) /
virtual void SetKeepAliveTime (DWORD dwKeepAliveTime) = 0;
/
设置异常心跳包间隔(毫秒,0 不发送心跳包,,默认:10 * 1000,如果超过若干次 [默认:WinXP 5 次, Win7 10 次] 检测不到心跳确认包则认为已断线) */
virtual void SetKeepAliveInterval (DWORD dwKeepAliveInterval) = 0;

通过尝试 这两个函数的参数值只有设置成1000以上时才能Start TcpSocket Server成功, 这样的话至少10秒左右才能检测到断线, 这对于客户端连接数量不高,实时性要求高的场景检测断线的时间就有点长了,请问是否可以改为参数可灵活配置, 并且可以设置检测次数?

顺便再提一个 SendLocalFile 有文件大小的限制, 如果发送大文件的话,可以用什么方式,有没有好的建议

@ldcsaa
Copy link
Owner

ldcsaa commented Dec 20, 2018

  1. 必须1秒以上,否则对性能影响太大
  2. 发送大文件用分块发送,然后组合存储

@anheiqq
Copy link
Author

anheiqq commented Dec 21, 2018

谢谢你的解答, 可能应用场景场景不一样,考虑的方向不一样, 我们的场景是一个局域网的数据通信,最多也就8个客户端, 而服务端是放在pc上给人使用的,连接后可以实时看到客户端的状态变化,是否掉线等,对检验掉线的实时性有些要求(1到2秒也可接受)。所以这种场景下客户端是比较少的,即使减小检测周期,对性能也不会产生多大影响。如果参数可以设置的话(或者可设置检测次数也行,检测次数应该对性能没太大影响吧?),用户就可以根据不同场景和不同需求就行调整了,只要将各种利弊描述清楚即可。

可能这种应用场景比较少,如果不能设置的话,那我们就自己定义心跳包去实现吧。

再次感谢作者的贡献, 这个库我们使用一段时间了,非常的方便也很稳定, 谢谢

@ldcsaa
Copy link
Owner

ldcsaa commented Dec 21, 2018

Thanks~

@ldcsaa ldcsaa closed this as completed Dec 21, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants