我打算制作一个 Android 应用程序,它需要像即时消息(聊天)应用程序一样工作,但有一点不同。它需要发送和接收一些短消息,重要的是它将消息从 Web 服务器快速传递到 Android 客户端(这是一个同步应用程序)。
此外,互联网连接可能不稳定(如 GPRS)。服务器应用程序使用.net 4.5
(可能是windows服务或web服务)
我四处搜索,但我的问题的答案并不清楚。我的问题如下:
使用开放套接字或每隔几秒检查一次服务器哪个更好? (最大允许延迟为 15-20 秒)
如果一个套接字处于打开状态且没有消息通过,那么它一天会使用多少网络流量?
可以同时打开多少套接字?
最佳答案
这真的取决于你想做什么,但这里有一些答案:
- 每隔几秒重新打开一个 TCP 连接可能不会有什么坏处。关闭+重新打开是大多数 HTTP 连接的工作方式。
- 空闲的 TCP 套接字根本不会发送任何流量,除非您启用 TCP keepalive,但即便如此它仍然很轻(并且通常是可调整的)。
- 通常很多,但实际上取决于您的软件和硬件。一台台式计算机在正常负载下可能有 1000 个打开的连接(但当然可以处理更多)。大型服务器可能会处理数百万个打开的连接。
根据您的“同步”内容,您应该考虑与 GPS 时间同步。它存在于大多数移动设备上,精度约为纳秒级(=所有设备都将具有相同的 GPS 时间,前后相差一些 ns)。但是服务器可能也需要 GPS 时间,具体取决于您的操作。
另外,根据您的应用,您应该考虑使用 UDP 套接字。好处是你只需要一个 UDP 服务器套接字来处理所有 UDP 客户端(你不能做得更轻),而且它在时间上更可靠(当出现问题时,TCP 可能会重新传输高延迟,而 UDP 是全有或全无,= 你自己处理最新的重新传输)。缺点是它不可靠(消息可能会丢失或损坏,因此您可能需要增加一些安全性),并且某些 ISP 可能对 UDP 的限制多于 TCP(请自行测试以确保,但通常不会出现问题)。请注意,使用 UDP,您可能需要通过发送虚拟消息来“保持 Activity 状态”,但只有在“连接”空闲时间过长时才需要这样做。
关于android - Android 应用程序和服务器之间哪个更好? socket 还是定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705915/