Android应用程序和服务器之间哪个更好?插座或计时器?

时间:2014-12-30 12:54:31

标签: android asp.net sockets alarmmanager

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

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

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

  1. 使用开放式套接字或每隔几秒检查一次服务器会更好吗? (允许的最大延迟时间为15-20秒)

  2. 套接字在一天内使用了多少网络流量,如果它已打开且没有消息通过?

  3. 可以同时打开多少个套接字?

1 个答案:

答案 0 :(得分:1)

这实际上取决于你想做什么,但这里有一些答案:

  1. 每隔几秒重新打开一次TCP连接可能不会受到伤害。关闭+重新打开是大多数HTTP连接的工作方式。
  2. 空闲的TCP套接字根本不会发送任何流量,除非您启用TCP keepalive,但即使这样,它仍然非常轻(通常可调)。
  3. 通常很多,但实际上取决于您的软件和硬件。台式计算机在正常负载下可能有1000个打开的连接(但当然可以处理更多)。一台大型服务器可以处理数百万个开放连接。
  4. 取决于您的'同步'事情是,你应该考虑与GPS时间同步。它存在于大多数移动设备上,并且具有大约纳秒的精度(=所有设备将具有相同的GPS时间,给出或采取一些ns)。但是,服务器也可能需要GPS时间,具体取决于你的工作。

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