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

标签 android asp.net sockets alarmmanager

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

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

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

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

  2. 如果一个套接字处于打开状态且没有消息通过,那么它一天会使用多少网络流量?

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

最佳答案

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

  1. 每隔几秒重新打开一个 TCP 连接可能不会有什么坏处。关闭+重新打开是大多数 HTTP 连接的工作方式。
  2. 空闲的 TCP 套接字根本不会发送任何流量,除非您启用 TCP keepalive,但即便如此它仍然很轻(并且通常是可调整的)。
  3. 通常很多,但实际上取决于您的软件和硬件。一台台式计算机在正常负载下可能有 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/

相关文章:

android - 如何创建自己的小部件并在其他 activity android 中重用它

android - 通过FTP将.mp3文件下载到我的应用中会更改文件的质量

c# - 使用 C# ASP.NET 将 Word 文档内容传输到服务器端的 Web 环境

javascript - 服务器端的 AngularJS 变量

C 即使套接字为空,recv() 仍继续读取

c++ - 通过 tcp 套接字发送数据时出现错误的文件描述符错误

c# - 跟踪文件传输百分比

Android NewBie - setAdapter ListView 面临的问题

android - shortcuts.xml 中的 "android.shortcut.conversation"是什么意思?

javascript - 根据 C# 内联代码的结果在 JavaScript 中创建正确的字符串