Objective c XCode(目标C)和C程序之间的进程间通信

Objective c XCode(目标C)和C程序之间的进程间通信,objective-c,c,macos,xcode7,Objective C,C,Macos,Xcode7,我正在开发一个OSX桌面应用程序,它包含两个独立的服务。第一个在C中实现,在后台收集数据并将其转发给第二个,即在目标C中实现的UI。更新后,用户界面对C程序做出应答,从而在程序之间进行双向通信 目前,我使用TCP套接字进行进程间通信,它可以工作,但有时套接字连接上的消息会延迟45秒。我的C和Objective C程序之间的通信是否有一种替代机制可以提供高速、最小的延迟 我使用的是XCode。在将主要工作的实现换成完全不同的实现之前,值得尝试对其进行调整,以消除不必要的延迟。这样做可能与通过set

我正在开发一个OSX桌面应用程序,它包含两个独立的服务。第一个在C中实现,在后台收集数据并将其转发给第二个,即在目标C中实现的UI。更新后,用户界面对C程序做出应答,从而在程序之间进行双向通信

目前,我使用TCP套接字进行进程间通信,它可以工作,但有时套接字连接上的消息会延迟45秒。我的
C
Objective C
程序之间的通信是否有一种替代机制可以提供高速、最小的延迟


我使用的是XCode。

在将主要工作的实现换成完全不同的实现之前,值得尝试对其进行调整,以消除不必要的延迟。这样做可能与通过
setsockopt()
修改套接字选项一样简单。特别是,通过设置
TCP\u NODELAY
选项,您可能会从禁用相关套接字中获益。此示例代码复制自以下内容,只需稍作修改:

#包括
#包括
int标志=1;
int result=setsockopt(sock,/*受影响的套接字*/
IPPROTO_TCP,/*在TCP级别设置选项*/
TCP_节点延迟,/*选项名称*/
&旗帜,
sizeof(int));/*期权价值长度*/
如果(结果<0)
... 处理错误。。。
下一个中断最少的选项是切换到Unix域套接字(
AF\u Unix
),而不是TCP套接字。实际上,对于保证始终在同一主机上运行的两个进程之间的通信来说,这是一个比TCP更好的选择,而且它仍然是一个套接字接口


<> P>还有其他可供选择的方案,例如管道(每个方向的一个)、消息队列以及共享内存方法的几种变化,但是考虑到您的起点,我甚至不考虑其中任何一个而不首先排除基于套接字的替代品。

在把你的主要工作实现完全换成完全不同的东西之前,这是值得尝试的,它可以消除不必要的延迟。这样做可能与通过
setsockopt()
修改套接字选项一样简单。特别是,通过设置
TCP\u NODELAY
选项,您可能会从禁用相关套接字中获益。此示例代码复制自以下内容,只需稍作修改:

#包括
#包括
int标志=1;
int result=setsockopt(sock,/*受影响的套接字*/
IPPROTO_TCP,/*在TCP级别设置选项*/
TCP_节点延迟,/*选项名称*/
&旗帜,
sizeof(int));/*期权价值长度*/
如果(结果<0)
... 处理错误。。。
下一个中断最少的选项是切换到Unix域套接字(
AF\u Unix
),而不是TCP套接字。实际上,对于保证始终在同一主机上运行的两个进程之间的通信来说,这是一个比TCP更好的选择,而且它仍然是一个套接字接口


还有其他可供选择的方案,例如管道(每个方向的一个)、消息队列以及共享内存方法的几种变化,但是考虑到你的起点,我甚至不会考虑那些没有首先排除基于套接字的替代方案的情况。

取决于你对“更好”的定义。肯定有人支持unix域套接字、共享内存、管道等。您关心哪些功能?(也就是说,衡量一种方法比另一种方法“更好”的标准是什么?)我想要类似notifier的东西。一种在跨平台软件上工作的通知程序。每当C服务发生变化时,我都会将其发送到UI,objective C接收到它。我是用套接字来做这件事的。@syammala,这并没有说明IPC机制的哪些特性对于判断一个机制是否优于另一个机制很重要。如果我理解正确的话,那么您已经拥有的东西可以工作了,那么您在某种程度上对它不满意吗?您不需要Xcode来编写ObjC。没有“在Xcode中”编写代码就好像“Xcode”是一种语言一样的事情。@bbum是的,我知道,Xcode是一种IDE。我只是告诉大家,我正在通过组合两个服务构建一个应用程序。一个是使用objective C从Xcode构建的,另一个是C二进制文件,这取决于“更好”的定义。肯定有人支持unix域套接字、共享内存、管道等。您关心哪些功能?(也就是说,衡量一种方法比另一种方法“更好”的标准是什么?)我想要类似notifier的东西。一种在跨平台软件上工作的通知程序。每当C服务发生变化时,我都会将其发送到UI,objective C接收到它。我是用套接字来做这件事的。@syammala,这并没有说明IPC机制的哪些特性对于判断一个机制是否优于另一个机制很重要。如果我理解正确的话,那么您已经拥有的东西可以工作了,那么您在某种程度上对它不满意吗?您不需要Xcode来编写ObjC。没有“在Xcode中”编写代码就好像“Xcode”是一种语言一样的事情。@bbum是的,我知道,Xcode是一种IDE。我只是告诉大家,我正在通过组合两个服务构建一个应用程序。一个是使用objective C从Xcode构建的,另一个是C二进制。谢谢。。谢谢你的帮助。。非常感谢你的帮助
#include <sys/socket.h>
#include <netinet/in.h>

int flag = 1;
int result = setsockopt(sock,            /* socket affected */
                        IPPROTO_TCP,     /* set option at TCP level */
                        TCP_NODELAY,     /* name of option */
                        &flag,  
                        sizeof(int));    /* length of option value */
if (result < 0)
   ... handle the error ...