如何通知客户端即时消息(IM)应用程序的更新?

时间:2016-01-15 17:39:29

标签: java android client-server message distributed-computing

我对这个主题已经有过不同的问题,但是,他们都没有清除我对服务器客户端IM应用程序通知客户端的最佳方法的疑虑。

问题: 整个问题是如何通知客户端应用程序更新。我已经看过以下方法:

  1. 客户端不断检查更新:客户端应用程序会不时在服务器中检查是否有针对该特定用户的更新; 问题:根本不是表演。假设您有一百万用户,并且每个用户每秒检查一次新的更新。 Serve必须每秒处理一百万个请求。不会工作。

  2. 客户端应用程序打开套接字:客户端应用程序打开套接字并将其地址发送到服务器。反过来,服务器会持久保存此信息,并在需要通知客户端某些更新时连接到套接字。 问题:客户端通常会连接到NAT,因此,它可以访问的IP处于不可见的范围内。为了向此客户端发送消息,必须配置NAT中的端口转发,这是无法完成的。

  3. 尽管有这项技术,但我认为这种方法总会被使用,但是,我不知道如何解决上述问题。

    1. Google Cloud Message(GCM):使用GCM服务通知客户端任何更新。 问题:使用第三台服务器来处理IM似乎是正确的,它引起了对系统可扩展性的担忧。当消息和用户数量呈指数增长时,服务似乎会下降。尽管如此,似乎在交付目标之前传递两台服务器的信息只会增加流程中的瓶颈。

    2. 2和3 的组合:当最后一个持久性地址不再可用时,使用GCM到达客户端。 问题:与2

    3. 中描述的相同
    4. XMPP :我已经看到许多答案表明XMPP用于IM应用程序,但是,XMPP是一个协议 - 根据我在网络上的内容。我不知道如何解决2中描述的问题。

    5. 鉴于上述选项,有人可以指出我应该尝试去哪一行吗?这些方法中哪一个最有成功的机会?

      先谢谢你们。

1 个答案:

答案 0 :(得分:1)

使用Google Cloud Messaging。反对你所说的这项服务是为了扩展到数十亿用户而构建的,它通常不会引入性能瓶颈。

您基本上想要做的是使用消息传递服务来唤醒设备。如果你坚持认为你仍然可以使用客户端服务器方法,从而使用自己的协议让客户端从后端查找新消息。