【发布时间】:2012-06-13 16:09:23
【问题描述】:
我正在开发一个消息传递应用程序,但对于如何将数据从服务器发送到客户端感到两难。
我正在使用集中式服务器设计,其中客户端使用NSURLConnection 向服务器发送消息,服务器不保留和管理打开的套接字,也无法为其中一个客户端发送消息。所以客户端使用一个计时器,每 2 秒查询一次服务器,看看是否有新数据在等待它们。
这种方法的问题是每 2 秒轮询一次服务器似乎会很快耗尽电池电量,所以我想也许不是客户端轮询服务器,而是 使用 APNS* 所以当服务器有一些新信息 **给客户端,服务器会发送一个推送通知 ***给客户端,然后客户端去获取来自服务器的数据。
* 使用 APNS - 如果客户端允许,客户端当然可以禁用此选项。所以我会检查每次应用程序进入前台时是否允许推送,如果没有,我将返回轮询方法。
** 新信息可以是从短信到服务器管理员消息的任何内容。 (并且有很多管理消息...)
例如,在我的应用中,用户可以看到他们的朋友状态(在线/离线),所以如果 user1 和 user2 是朋友,并且 user2 只是将他的状态从在线更改为离线,那么服务器需要发送这个新信息(管理消息 = user2_offline ) 到 user1。
*** 推送通知服务器发送的是空的(没有数据/声音),它只是客户端的触发器获取新信息,因此如果向客户端发送推送并且客户端应用程序已关闭,他将不会注意到任何内容。 (如果应用程序正在运行,那么它将从服务器获取新信息)
这种方法是否适用于需要大量推送通知使用的大型消息传递应用程序?
为了清楚起见,我的主要担忧是:
1. APNS 是否足够可靠,我可以将其用作我的核心服务器到客户端消息传递机制?
2. 苹果是否会批准每天从我的服务器发送的数千或数十万条推送通知?
【问题讨论】:
-
在构建自己的轮询机制之前,先看看 SocketIO(长轮询)。
标签: iphone objective-c ios push-notification apple-push-notifications