android 应用程序和服务器之间哪个更好?插座还是定时器?

Posted

技术标签:

【中文标题】android 应用程序和服务器之间哪个更好?插座还是定时器?【英文标题】:Which is better between an android app and a server? Socket or timer? 【发布时间】:2014-12-30 12:54:30 【问题描述】:

我将制作一个需要像即时消息 (Chat) 应用程序一样工作的 android 应用程序,但有一点不同。它需要发送和接收一些短消息,并且将消息从Web服务器快速传递到android客户端(这是一个同步应用程序)很重要。

此外,互联网连接可能不稳定(如 GPRS)。服务器应用使用.net 4.5(可能是windows服务或web服务)

我已经四处搜索,但我的问题的答案并不清楚。我的问题如下:

    使用打开的套接字更好还是每隔几秒检查一次服务器更好? (允许的最大延迟为 15-20 秒)

    如果套接字打开且没有消息通过,一天会使用多少网络流量?

    可以同时打开多少个socket?

【问题讨论】:

【参考方案1】:

这真的取决于你想做什么,但这里有一些答案:

    每隔几秒重新打开一个 TCP 连接可能不会有什么坏处。关闭+重新打开是大多数 HTTP 连接的工作方式。 空闲的 TCP 套接字根本不会发送任何流量,除非您启用 TCP keepalive,但即便如此,它仍然很轻(并且通常可以调整)。 通常很多,但实际上取决于您的软件和硬件。台式计算机在正常负载下可能有 1000 个打开的连接(但当然可以处理更多)。大型服务器可能会处理数百万个打开的连接。

根据您的“同步”内容,您应该考虑与 GPS 时间同步。它存在于大多数移动设备上,并且具有大约纳秒的精度(= 所有设备都将具有相同的 GPS 时间,给或取一些 ns)。但是服务器可能也需要 GPS 时间,具体取决于您的操作。

另外,根据您的应用程序,您应该考虑使用 UDP 套接字。好处是你只需要一个 UDP 服务器套接字来处理所有的 UDP 客户端(你不能做得更轻),而且它在时间方面更可靠(当出现问题时,TCP 可能会以高延迟,而 UDP 是全有或全无,=您自己处理最新的重新传输)。缺点是它不可靠(消息可能被丢弃或损坏,因此您可能需要增加一些安全性),并且某些 ISP 可能比 TCP 限制更多的 UDP(请自行测试以确保,但通常没有问题)。请注意,使用 UDP,您可能需要通过发送虚拟消息自己“保持活动”,但只有在“连接”空闲时间过长时才需要。

【讨论】:

谢谢,我需要同步而不是计时。这就像一个警报。有些传感器可用,有些人应该检查传感器。如果发生事件,我的应用程序应该提醒某人。(这正是智能远程家庭控制)

以上是关于android 应用程序和服务器之间哪个更好?插座还是定时器?的主要内容,如果未能解决你的问题,请参考以下文章

fsockopen 和 curl 之间哪个更好? [关闭]

Nativescript:在路由器插座之间导航

在服务器和客户端之间传递对象的更好方法是啥?

URLConnection 或 HTTPClient:哪个提供更好的功能和更高的效率?

android开发,Android Studio和IDEA哪个更好用?优势在哪

Web 服务 API 设计中哪个模式更好