Cocoa客户端/服务器应用程序

时间:2009-01-03 16:57:12

标签: python cocoa web-services client-server pyobjc

Cocoa中是否存在目前被认为是创建多层或客户端服务器应用程序的最佳实践的方法?

我是一位经验丰富的网络开发人员,我非常喜欢Python。我虽然是Cocoa的新手。我正在写的应用程序是一个大型医院的患者管理系统。预计系统会随着时间的推移存储大量数据,但在单个会话期间传输的数据非常轻(大多数只是文本)。假设通信通过本地网络(有线或无线)发生。当然,它必须是高度安全的。

我能想到的最好的方法是编写一个Python REST Web服务并通过Cocoa应用程序连接到它。也许我甚至会使用Python来编写Cocoa应用程序本身。

看看Cocoa,我在Cocoa中看到了非常棒的技术,比如CoreData,但我找不到任何与客户端服务器开发相似的技术。我只是想确保我没有遗漏任何东西。

您怎么看?

非常感谢真实世界的例子。

提前致谢。

5 个答案:

答案 0 :(得分:6)

如果您同时控制了客户端和服务器,并且您可以将客户端限制为仅限OS X,那么我会回答Marc的回答。 Cocoa的分布式对象是一项了不起的技术,使得RPC式客户端 - 服务器应用程序非常容易。

如果上述要求对你来说限制太多,你在Cocoa世界中仍有很多选择:

  1. 您可以使用PyObjC在Python中编写整个客户端应用程序。使用此方法,您可以使用Python标准库中熟悉的标准网络代码。 Twisted还与Cocoa运行循环(PyObjC示例代码中的示例)很好地集成,并且我在Cocoa应用程序中使用Twisted进行网络通信已经取得了很大的成功。如果您选择这条路线,您可能希望在Objective-C中编写客户端应用程序代码并将python代码作为插件加载(使用NSBundle)。 PyObjC的py2app可以从python代码编译可加载的包。

  2. 您可以使用NSURLConnection对基于HTTP的服务器进行高级访问。

  3. 降低抽象级别,您可以使用Cocoa的NSStream来实现您的网络协议。类文档是here,其中包含演示HTTP和SOAP协议的示例代码的链接。

  4. 您可以进一步降低级别并使用CFNetwork类。 NSStream基于CFNetwork,但您可以使用CFNetwork对线路进行较低级别的控制。

  5. 最后,用于客户端 - 服务器体系结构的Apple技术是WebObjects框架。

答案 1 :(得分:3)

Cocoa有Portable Distributed Objects,它允许您在纯Objective-C和Cocoa中构建客户端/服务器应用程序,它可以跨进程或跨网络进行通信。

不幸的是,这是在Cocoa中学习的难题之一。分布式对象尚未更新以跟上绑定等新技术,没有很多示例或文档(许多教程都是旧版本,有些甚至是OS X之前的版本)。即使对于有经验的Cocoa程序员来说,也存在许多“陷阱”,即对象通过线路传输的方式,作为副本或代理对象。例如,您可以从服务器传输NSURL,如果您将其转换为字符串或在调试器中查看它似乎没问题,但如果您尝试在NSURLConnection中使用它,您的客户端将崩溃。

根据您的经验,使用Web服务可能更容易,更快捷,但如果您希望将整个项目保留在Cocoa中,仍然值得一试。如果你想看一个例子,这是一个tutorial

答案 2 :(得分:1)

通常,所有其他客户端/服务器框架的想法都适用。

请看一下这个链接:http://developer.apple.com/internet/webservices/webservicescoreandcfnetwork.html

答案 3 :(得分:0)

我编写了一个服务器和一个客户端类,用于Cocoa。 使用这些类可以很容易地生成服务器或客户端应用程序,而无需了解套接字和C-stuff 只需查看my websitesourceforge.net project site

答案 4 :(得分:-1)

查看NSConnectionNSDownload的api来处理网络连接。 NSString类也有类似+ stringWithContentsOfURL:encoding:error:的方法,可能很有用。

然后有NSXMLParserNSXMLDocument来读取xml数据。