代码之家  ›  专栏  ›  技术社区  ›  jkp

我应该如何在iPhone应用程序和Objective-C服务器端应用程序之间实现双向网络?

  •  3
  • jkp  · 技术社区  · 15 年前

    长话短说,我正在修改现有的库,以便在客户机-服务器环境中使用。这个库(在服务器上运行)基本上是一个搜索引擎,它提供定期的结果,另外还可以在以后为这些结果中的任何一个提供更新。因此,在一个理想的世界中,我将能够通过我的假设网络解决方案实现以下目标:

    • 在服务器上启动查询。
    • 让服务器在结果到达时将其“推”到客户端。
    • 让服务器在单个结果到达时“推送”更新到客户端。

    如果我编写这个客户机是为了在另一台Mac上运行,我可能会考虑使用 Distributed Objects 掩盖服务器实际上是远程运行的事实,但是DO在iPhone上是不可用的。

    如果我在编写一个更通用的客户机-服务器应用程序,我可能会考虑使用HTTP为搜索提供某种RESTful接口,但是这个解决方案不适合异步更新,另外,我的建议也不适合REST的“无状态”模式:我必须对我的协议进行建模,这样我就“创建”了一个搜索资源,我可以随后查询它的状态,我还必须轮询它的更新。

    有人提出的一个建议是利用 BLIP 为我提供客户端和服务器之间的双向管道,并为服务器端资源实现我自己的“代理”类型的对象,这些资源知道如何从服务器获取数据,并且还可以寻址,以便服务器可以向它们推送更新。虽然BLIP提供了双向通信所需的低级消息传递框架,但它仍然给我留下了几个问题:

    • 这在iPhone上的表现如何:如果我有一个与服务器的持久连接,这会不会太快耗尽电池?这个问题在HTTP世界中也是相关的:大多数异步更新都是使用COMET类型的hack完成的,这同样需要一个持久连接。

    所以现在我仍然完全不确定最好的方法是什么:我已经做了大量的搜索和阅读,但还没有解决任何问题。我在这里这么问是因为我确信你们当中有很多人已经解决了这个问题。

    0 回复  |  直到 15 年前