只要客户端和服务器都是 OS X 应用程序并且都可以使用 Cocoa 框架在 Objective-C 中编写,我强烈建议您看看 Cocoa 中的分布式对象(DO) 技术。我不会尝试在这里给出分布式对象的教程,只是解释为什么它可能有用......
DO 为您处理异步网络详细信息(您的所有客户端更新都可能发生在单个线程上)。此外,与远程对象(客户端到服务器或反之亦然;一旦建立连接,DO 是双向的)通信的语义与进程内通信非常相似。换句话说,一旦你引用了远程对象(实际上是NSDistantObject
连接另一端对象的代理),你的客户端代码就可以将消息发送到远程对象,就好像它是本地对象一样:
[remoteServer update:client];
来自客户或
[[remoteClientList objectAtIndex:i] update:server];
从服务器。在阅读了分布式对象编程指南后,我将把设置连接和获取 remoteServer 或 remoteClient 引用的详细信息留给您。
使用 DO 的缺点是你依赖于 Cocoa;编写使用分布式对象进行通信的非 Cocoa 客户端或服务器将非常困难。如果您可能希望拥有非 Cocoa 客户端或服务器实现,则不应使用 DO。在这种情况下,我会推荐一些简单的东西,有很多跨平台和语言支持。HTTP 上的 REST 风格的 API 是一个不错的选择。查看 Cocoa URL 加载系统文档以获取有关如何实现 HTTP 请求和响应的信息。查看 Apple 的CocoaHTTPServer示例代码或同名的 code.google.com 项目,了解有关在 Cocoa 代码中实现 HTTP 服务器的信息。
作为最后一个选项,如果您想实现自己的网络协议,可以查看 Cocoa Stream Programming Guide 。NSStream
的子类将让您侦听网络套接字并处理对该套接字的异步读/写。很多人为此目的使用AsyncSocket 。它包装了(较低级别的)CFStream 和 CFSocket,使编写网络代码更加容易。