2

我们有一个基于 HTTP 的长轮询方案的应用程序(尽管这个问题可能适用于任何基于 TCP 的协议)。我们的超时时间相当长,30 分钟左右。

我们有时会看到移动设备每隔一分钟左右就频繁地从 IP 跳到 IP,这会导致数十个长寿命套接字堆积在服务器上。不禁认为这造成了不必要的负担。

因此,我猜测某些 IP 网关在设备跳出时关闭连接方面比其他网关更好。我能想到的解决这个问题的策略是:

  • 减少超时(增加设备的电池寿命)
  • 当用户重新连接时关闭最后一个活动连接(需要 cookie 或用户 ID 跟踪)

还有其他人吗?

4

2 回答 2

1

我会考虑在您的服务器中使用 cookie 或某种 ID 关闭最后一个活动连接。是的,这是更多的工作,但是一旦用户跳转地址,您就可以找到旧的套接字并清理资源。绑定到用户名或类似的东西应该相当容易。

即使用户设备没有跳跃地址,您也可能遇到的另一个问题,一些移动网络,也许您自己的网络可能有一个状态防火墙,它会清理未使用的套接字,这将导致连接问题,因为新连接会再次要求 syn/syn-ack。如果您注意到连接问题,请记住一些事情。

如果你决定玩keep alives,请不要太咄咄逼人,健谈的应用程序是移动网络的瘟疫,而那些在失去与服务器的连接时锤击网络的应用程序可能会导致网络出现各种问题(和你,如果承运人赶上)。至少有一种回退机制来重试连接,甚至可能试图找出设备每分钟切换 IP 地址的原因。如果它运行正常,那不应该发生。

***我在加拿大的一家移动运营商工作,但是,我的评论并不反映我雇主的立场。

于 2010-10-19T16:05:31.593 回答
0

如果可以的话,打开套接字上的 TCP keepalive,并给它们一个相当低的计时器(例如每 1-5 分钟)。只要您从套接字读取,您就会更快地检测到无法访问的对等点 - 并且与减少 30 分钟应用程序超时相比,手机上的资源利用率更少。

于 2010-10-19T15:52:01.990 回答