【问题标题】:telegram ,whatsapp, viber tcp connection电报、whatsapp、viber tcp 连接
【发布时间】:2015-01-27 22:10:27
【问题描述】:

我正在分析电报或 whatsapp 等聊天应用程序。如您所知,他们正在使用与服务器的 tcp 连接。 tcp 连接的大问题​​是,当互联网连接出现任何问题时,xmpp 客户端将与服务器断开连接,而不会告诉服务器我已断开连接,并且将从服务器打开 tcp 连接并且消息将丢失。

因此,客户端和服务器了解连接丢失的一种方法是使用 ping 。也就是说,我们为服务器和客户端设置一个时间来相互 ping,如果连接丢失,请重试连接。这个解决方案的主要问题是它会消耗大量电池电量,例如,如果我们将客户端设置为每 10 秒 ping 一次,如果我们将服务器设置为每 40 秒 ping 一次用户,那么当我们在处理大量用户。

但是电报和whatsapp没有这个问题,因为他们会明白tcp连接最多30秒就会丢失,电报甚至更快,它会在4或5秒内知道。

我的问题是我不认为 whatsapp 或电报正在使用 ping 系统实际上每 10 秒 ping 服务器一次,因为它会耗尽电池。

你的想法是什么?他们是在使用 ping 系统还是已经找到任何解决方案。

如果有人向我解释他们是如何做到的,我将非常感激

【问题讨论】:

标签: android networking tcp xmppframework whatsapp


【解决方案1】:

TCP 本身有一种检测连接丢失的方法,所以你根本不需要 ping。但是,您可以发出更高级别的心跳信号,以防通常的 TCP 方式不够快。

http://www.roman10.net/android-tcp-client-and-server-communication-programmingillustrated-with-example/

【讨论】:

    【解决方案2】:

    您需要有一些保活机制,并让您的服务器通过错过保活来检测连接丢失。否则,根据服务器配置,在 TCP 级别检测连接丢失可能需要很长时间。

    【讨论】:

    • 非常感谢您的回答
    • 在维基百科中据说通常设置为 2 小时,如果我们将其设置为 10 秒,例如,我认为它会消耗大量电池,正如我告诉我检查电报我的意思是客户端本身当它在前台时,它会理解 TCP 连接丢失长达 10 秒。我无法检查它何时在后台连接是否正在运行。我知道当客户端进入后台时,存在 api 将被杀死,但我无法理解连接将被关闭或只是存在 api 将被杀死。 whatsapp 或电报设置敌人保持活动的确切时间是什么时候?
    • 在我使用 wifi 和 vpn 连接之前的测试中,当我连接到 vpn 时,android 将连接到互联网。当应用程序处于前台时,我将断开 vpn 并且服务器认为它在线并且我关闭应用程序并进入后台并且它无法通知服务器我离线所以我认为服务器不会发送任何推送。我向它发送消息从另一台设备,我再次通过 vpn 连接到互联网,但使用另一个 ip 以确保不会再次建立 tcp 连接。
    • 所以在这种情况下,应用程序不会认为连接发生任何变化,因为 android 无法理解 wifi 或 3g 的变化,但电报会很快(在 5 秒内)收到消息,我不认为消息被推送因为服务器一直说用户在线
    • 存在状态可以独立于 TCP/IP 连接状态。没有什么说它必须被链接(实际上 ejabberd SaaS 就是这样工作的:即使您断开连接,也可以在线看到您,并且可以通过推送接收您的消息)。
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多