0

我有一个可可应用程序,我想在其中使用UNIX 域套接字与系统范围的守护程序进行通信。

第一步,我的客户端将连接到守护程序,然后侦听来自守护程序的传入日志语句。

我发现的示例,来自 Apple 的 CFLocalServer,用于CFSockets在两个命令行实用程序之间进行通信。我能够很好地设置代码的守护进程部分,因为我可以自由决定在我的守护进程([[NSRunLoop currentLoop] run]CFRunLoopRun())中调用什么函数。但是,我对客户端有疑问,这是一个可可应用程序。

在代码示例中,客户端首先创建它们,连接,将它们作为源添加到当前CFRunLoop的监听操作,然后调用CFRunLoopRun();直到被取消CFRunLoopStop(CFRunLoopGetCurrent());

我的问题是:我可以在一个由 Objective-C 可可应用程序创建的串行调度队列的块内完成所有这些操作,而不会干扰应用程序主线程中的 NSRunLoop 吗?

4

1 回答 1

2

是的,您可以这样做,尽管您可能只想将套接字附加到主运行循环并让它正常运行(即不要调用CFRunLoopRun(),因为它已经在运行)。

如果您的需求很复杂,我还会查看GCDAsyncSocket,它是所有此类工作的非常好的包装器。它目前不支持 unix 域套接字,但您可以使用jdiehl 的 socketUN 分支来添加它。

于 2013-04-30T23:23:07.213 回答