【发布时间】:2011-09-12 19:11:30
【问题描述】:
我有一个 Cocoa 客户端和服务器应用程序,它们使用通过 NSSocketPorts 和 NSConnections 以标准方式实现的分布式对象进行通信。服务器将单个对象出售给客户端应用程序,其中可能有多个。每个客户端应用程序都可以通过自己的代理访问同一个分布式对象。
出售的对象支持特定的协议,其中包括类似于以下的方法:
@protocol VendedObjectProtocol
- (void) acquireServerResource:(ServerResourceID)rsc;
@end
当客户端应用程序调用此方法时,服务器应该将请求的资源分配给该客户端应用程序。但是可能有多个客户端请求相同的资源,服务器需要跟踪哪些客户端请求了它。
我希望能够在服务器端做的是确定客户端方法调用使用的 NSConnection。我该怎么做?
我想到的一种方法是(服务器端):
- (void) acquireServerResource:(ServerResourceID)rsc withDummyObject:(id)dummy {
NSConnection* conn = [dummy connectionForProxy];
// Map the connection to a particular client
// ...
}
但是,我真的不希望客户端在没有真正目的的情况下(从客户端的角度)必须通过一个虚拟对象。我可以将 ServerResourceID 设为一个类,以便它作为代理传递,但我也不想真正这样做。
在我看来,如果我使用原始套接字进行通信,我将能够确定消息来自哪个套接字,因此能够确定哪个客户端发送它而无需客户端发送任何内容特别作为消息的一部分。我需要一种通过分布式对象方法调用来做到这一点的方法。
谁能提出一个这样做的机制?
【问题讨论】:
标签: cocoa macos distributed-objects nsconnection