1

我有一个项目需要 Android 客户端和服务器之间的通信。

通信流程为:

  • 客户端定期(每 10 秒)将其位置发送到服务器
  • 服务器是一个桌面应用程序(C# 或 Java)。通常服务器自己做,但有时它需要向多个特定的客户端发送命令(需要实时

对于从客户端到服务器的方向,没有问题。但在相反的方向,从服务器到客户端,我有一些问题。我正在使用 Google 云消息传递,但我意识到命令有一些延迟或丢失。我还考虑了 XMPP 技术。如果我使用 XMPP,服务器和客户端将成为 XMPP 服务器的用户(如聊天用户)。除了失去互联网连接的情况外,这非常好。

任何有 XMPP 服务器或/和 GCM 经验的人,请给我一些建议。

4

3 回答 3

3

XMPP / Jabber用于实时通信。如果您想开发像“whatsapp”这样的聊天应用程序,那么您应该使用 XMPP。

GCM是一种云,即使您的应用程序没有运行,它也会在发送之前存储您的消息。云会保存您的消息并在您的设备连接到互联网后立即发送它们。

您的要求是实时聊天,所以您必须使用 XMPP。

于 2013-09-28T02:55:29.233 回答
1

我同意 Brontok,除了:

“ GCM 是一种云,即使您的应用程序没有运行,它也会在发送之前存储您的消息。云会保存您的消息并在您运行应用程序后立即发送它们。”

GCM 存储您的消息以在您有网络连接时发送它们(可以访问 Android 播放服务)即使您的应用程序没有运行您收到消息,如果通过通知您可以“恢复”您的应用程序,即使它“死”

于 2013-09-30T15:15:36.307 回答
1

我已经尝试过使用 XMPP 而不是 GCM。因为客户经常移动非常快,所以他们使用 3G 或 4G 来保持互联网连接。我用以下场景进行了测试:

  • 服务器从 1 开始计数,并每 30 秒将此数字发送给客户端
  • 当客户端收到号码时,它只是响应服务器
  • 服务器接收响应并计算消息的“往返时间”

我测试了 3G 和 4G 连接,在每个测试中服务器从 1 计数到 600

结果如下:

3G:

  • 损失:10 / 600
  • 平均 RTT:5.002 秒

4G:

  • 损失:4 / 600
  • 平均 RTT:1.112 秒

实际上,如果客户端使用 3G 连接,延迟是不可接受的。你有什么想法来解决这个问题吗?

于 2013-10-10T07:00:14.400 回答