将邮件从Azure应用程序推送到没有Apple推送通知的MonoTouch(iPhone)应用程序
我目前正在为iOS(使用MonoTouch)设计一个应用程序,该应用程序将具有在Windows Azure上运行的服务器组件。该应用程序本质上是一个聊天型应用程序,用户将在其客户端中生成消息并将其发送给服务器,然后该服务器需要将这些消息(尽可能快地)转发到其他用户可能正在发送消息的客户端至。将邮件从Azure应用程序推送到没有Apple推送通知的MonoTouch(iPhone)应用程序
我的问题是 - 是否有建议这样的应用程序的架构,其中客户端需要从服务器接收'推'消息?
我考虑了一些选择,但会很感激反馈。
第一个选项是使用Apple的推送通知服务(APNs)。我对此有两个担忧 - 首先,客户端只需要在他们在线时接收消息(APN在应用程序关闭时也会发送消息,而我并不需要或不需要)。其次,有可能会有大量的消息,我知道苹果可能会对此感到不满(完全公平)。
我考虑的第二个选择是使用Web服务(基于WCF),让客户端每2-3秒(如2-3秒)调用此服务,这是我们可以容忍的最大延迟时间。这似乎涉及大量潜在不必要的网络流量,但(“你有什么给我吗?”,“不”,反复出现广告恶心)。
第三个选项是维护客户端和服务器之间的持久Web服务连接。当客户端应用程序启动时,它会在后台线程上调用Web服务方法。服务器会保持连接打开(不返回任何东西),如果有任何消息通过,它会立即返回它们。此连接可能会超时,例如2分钟,此时它将被重新建立。这似乎是做我想做的事情,但我担心随时会有很多连接打开到服务器,这可能需要不必要的服务器资源。
第四种选择是通过TCP(或UDP,尽管从我发现的Windows Azure不支持这种方式)使用持久连接。这似乎是一个不错的选择,但同样可能会导致服务器使用率过高 - 可能有数百甚至数千个客户端随时连接。
第五种方法是以某种方式让服务器直接向客户端推送消息,或许通过让客户端运行迷你Web服务器或类似服务器。但是,由于应用程序将运行在3G和WiFi网络上(不受我的控制),我不认为传入的端口会为这类事情打开。
如果任何人有任何其他建议,或认为上述选项之一将是一个不错的主意(或者是接近这种问题的标准方式)我会听到这件事很感兴趣。
由于提前,
约翰