1

我想编写从客户端(Android/Iphone)获取数据并实时推送到客户端(比如网站)的网络服务。Android不断向服务器发送数据,网站上应该显示相同的信息。

发送的数据将是纯文本文件。我在 android 上的应用程序将每秒生成纯文本,并将其发送到服务器。网站上应显示相同的纯文本。

-------            --------                  --------  
Android     ---->  Server      ------>       Website 
-------            --------                  --------  

您建议使用哪些技术来实现实时结果?

4

1 回答 1

1

如果没有关于这个故事的更多信息,我可以想到一些建议,我相信有很多方法可以解决这个问题。

情况 1:消息未经编辑发送到网站- 这是迄今为止最简单的情况,您可以使用Pusher.com(或类似的东西)而不是编写自己的服务器。Android Client 提供了一个 android 客户。但这只有在您不想操纵 Android 和网站之间的消息时才有效。如果您希望服务器了解消息(例如出于日志记录的原因),您还可以让服务器收听与网站相同的频道。

-------            --------                  --------  
Android     ---->  Pusher.com      ------>   Website 
-------            --------                  -------- 

案例2:您的服务器需要在中间或者您需要拥有中间人-

这种设计可能比你想象的更狡猾。这仅取决于许多因素。
例如:

  • 您的服务器需要水平扩展还是需要 HA?
  • Android 设备是仅与一个 WebClient 通信还是向多个 WebClient 发布:1 对 1 通道或 pub/sub?
  • 它有多少服务器处理跟上您的入站负载。
  • 您是否需要检索 WebClients 离线时产生的消息。
  • 您需要支持哪些浏览器/android 版本。
  • ETC...

基于这些因素,您最终可能需要支持这样的设计:

                                                         --------  
                              ---------- out-channel ->  WebClient0
                             |                           -------- 
-------                    --------                      --------  
Android  -- in-channel --> server1 ---- out-channel ->   WebClient1
-------               |    --------                      -------- 
                      |    --------                      --------  
                      \--> server2  ---- out-channel ->  WebClient2 
                           --------                      -------- 

一些帮助您入门的基本框架:

  1. Pusher.com - 您可以在两个入站/出站通道之间使用您的服务器的两个推送通道。
  2. http://socket.io/ - 这是一个非常容易使用的 node.js 模块。它包含一个 JavaScript 库,是您出站渠道的绝佳选择。YFI:这个项目也有一个移植到 Java/Netty 的端口。
  3. http://aws.amazon.com/sqs/ - 这是 AWS 提供的分布式队列。由于跨源策略,它不适用于 Web 浏览器,但 Android 可以很好地向它提交消息。因此,它可以用于入站通道。另外(如 Pusher 通道)SQS 队列支持 pub/sub,因此您可以将消息发布到所有服务器。

有很多框架可以处理实时处理,但在不了解更多信息的情况下,我将限制对这些基础知识的回答。

于 2013-04-10T06:54:11.093 回答