10

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

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

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

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

你怎么看?

现实世界的例子将不胜感激。

提前致谢。

4

5 回答 5

6

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

如果上述要求对您来说过于严格,您仍然可以在 Cocoa 世界中使用许多选项:

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

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

  3. 降低一个抽象层次,您可以使用 Cocoa 的 NSStream 来实现您的网络协议。类文档在此处,其中包含演示 HTTP 和 SOAP 协议的示例代码的链接。

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

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

于 2009-01-03T21:51:49.793 回答
3

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

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

根据您的经验,使用 Web 服务可能更容易和更快,但如果您想将整个项目保留在 Cocoa 中,仍然值得研究。如果你想看一个例子,这里有一个教程。

于 2009-01-03T20:48:13.543 回答
1

一般来说,所有其他客户端/服务器框架的想法都是适用的。

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

于 2009-01-03T17:39:43.033 回答
0

我已经编写了一个用于 Cocoa 的服务器和客户端类。使用这些类可以很容易地在不了解套接字和 C-stuff 的情况下生成服务器或客户端应用程序只需看看我的网站sourceforge.net 项目站点

于 2009-05-06T13:25:52.643 回答
-1

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

然后是NSXMLParserNSXMLDocument用于读取 xml 数据。

于 2009-01-03T17:45:45.640 回答