Mobile 持久TCP连接、长时间超时和IP跳跃移动设备

Mobile 持久TCP连接、长时间超时和IP跳跃移动设备,mobile,tcp,long-polling,persistent-connection,Mobile,Tcp,Long Polling,Persistent Connection,我们有一个通过HTTP的长轮询方案的应用程序(尽管这个问题可能适用于任何基于TCP的协议)。我们的超时时间相当高,大约30分钟 我们有时会看到,移动设备相当频繁地从一个IP跳到另一个IP,大约每分钟跳一次,这导致服务器上堆积了几十个长寿命的套接字。我忍不住认为这会导致更多的负载 所以我猜测,当设备跳下时,某些IP网关在关闭连接方面比其他网关更好。我能想到的应对策略是: 减少超时(增加设备上的电池寿命) 当用户重新连接时关闭最后一个活动连接(需要cookie或用户ID跟踪) 还有其他的吗?如果

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

我们有时会看到,移动设备相当频繁地从一个IP跳到另一个IP,大约每分钟跳一次,这导致服务器上堆积了几十个长寿命的套接字。我忍不住认为这会导致更多的负载

所以我猜测,当设备跳下时,某些IP网关在关闭连接方面比其他网关更好。我能想到的应对策略是:

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

还有其他的吗?

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

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

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

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

如果你决定使用keep alives,请不要太激进,聊天应用程序是移动网络的瘟疫,当网络失去与服务器的连接时,会对网络造成冲击的应用程序可能会给网络带来各种问题(如果运营商发现了这一点,你也会受到影响)。至少有一种回退机制来重试连接,甚至可能尝试找出设备每分钟切换IP地址的原因。如果它运行正常,就不会发生这种情况


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

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

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

如果你决定使用keep alives,请不要太激进,聊天应用程序是移动网络的瘟疫,当网络失去与服务器的连接时,会对网络造成冲击的应用程序可能会给网络带来各种问题(如果运营商发现了这一点,你也会受到影响)。至少有一种回退机制来重试连接,甚至可能尝试找出设备每分钟切换IP地址的原因。如果它运行正常,就不会发生这种情况


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

keepalive会不会像我们通过插座发送数据一样减少设备的电池消耗?是的,但是没有在应用程序中处理那么多。keepalive会不会像我们通过套接字发送数据那样减少设备上的电池消耗?是的,但没有在应用程序中处理那么多。我有点担心keepalives,因为任何数据活动都会唤醒收音机——这就是为什么我将它设置为30分钟。也不确定如何处理防火墙超时,不会在服务器上很容易发现:(@sehugg在您所在的网络上,设备是否获得公共IP地址?如果是,我见过的一种成功的方法是,当设备获得IP地址时,它向服务器注册,然后只监听输入连接,当有人需要时,服务器连接到设备。然而,运营商并不十分支持rtive的,可能会锁定它。另一种方法是向设备发送短信,让您的设备截获短信以唤醒应用程序来做一些事情。我没有连接到设备的运气-用UDP尝试过一次。现在我了解了像苹果的APNS和谷歌的C2DM这样的服务的价值:)@sehugg这些绝对是有价值的,但我从来没有看过它们是如何工作的,因此它们可能会遇到一些类似的问题。我只知道它是如何工作的,而且绝对可靠的是Rim中继网络,在那里它们可以与无线运营商网络建立私人连接,并且可以在没有防火墙和防火墙的情况下向设备发送数据没有干扰。苹果/谷歌系统可能会使用非常类似的长时间投票,我认为这并不理想,但我从来没有从这些设备上截取过任何一个数据来查看。我有点担心keepalives,因为任何数据活动都会唤醒收音机——这就是为什么我将其设置为30分钟。我也不确定如何处理防火墙超时,w在服务器上,我们不会轻易注意到它:(@sehugg在n