XCode(Objective C)与C程序的进程间通信
Interprocess communication between XCode (Objective C) and C program
我正在开发一个包含两个独立服务的 OS X 桌面应用程序。第一个,在 C 中实现,在后台收集数据并将它们转发给第二个,UI 在 Objective C[=22 中实现=].更新后,UI 向 C 程序作出确认响应,程序之间实现了双向通信。
我目前使用 TCP 套接字进行进程间通信,它工作正常,但有时通过套接字连接的消息最多会延迟 45 秒。是否有替代机制可以在我的 C
和 Objective C
程序之间提供高速、最小延迟的通信?
我正在使用 XCode。
在用完全不同的东西替换大部分工作的实现之前,值得尝试调整它以消除不必要的延迟。这样做可能就像通过 setsockopt()
修改套接字选项一样简单。特别是,听起来您可能会从禁用 Nagle's algorithm on the sockets involved, by setting the TCP_NODELAY
option. This sample code for doing so is copied, with minor modifications, from http://www.unixguide.net/network/socketfaq/2.16.shtml:
中受益
#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 ...
下一个破坏性最小的选择是切换到 Unix 域套接字 (AF_UNIX
) 而不是 TCP 套接字。事实上,对于保证始终在同一主机上 运行 的两个进程之间的通信,这是比 TCP 更好的选择,而且它仍然是一个套接字接口。
您还可以考虑其他替代方案,例如管道(每个方向一个)、消息队列和共享内存方法的几种变体,但考虑到您的出发点,我什至不会考虑其中任何一个没有首先排除基于套接字的替代方案。
我正在开发一个包含两个独立服务的 OS X 桌面应用程序。第一个,在 C 中实现,在后台收集数据并将它们转发给第二个,UI 在 Objective C[=22 中实现=].更新后,UI 向 C 程序作出确认响应,程序之间实现了双向通信。
我目前使用 TCP 套接字进行进程间通信,它工作正常,但有时通过套接字连接的消息最多会延迟 45 秒。是否有替代机制可以在我的 C
和 Objective C
程序之间提供高速、最小延迟的通信?
我正在使用 XCode。
在用完全不同的东西替换大部分工作的实现之前,值得尝试调整它以消除不必要的延迟。这样做可能就像通过 setsockopt()
修改套接字选项一样简单。特别是,听起来您可能会从禁用 Nagle's algorithm on the sockets involved, by setting the TCP_NODELAY
option. This sample code for doing so is copied, with minor modifications, from http://www.unixguide.net/network/socketfaq/2.16.shtml:
#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 ...
下一个破坏性最小的选择是切换到 Unix 域套接字 (AF_UNIX
) 而不是 TCP 套接字。事实上,对于保证始终在同一主机上 运行 的两个进程之间的通信,这是比 TCP 更好的选择,而且它仍然是一个套接字接口。
您还可以考虑其他替代方案,例如管道(每个方向一个)、消息队列和共享内存方法的几种变体,但考虑到您的出发点,我什至不会考虑其中任何一个没有首先排除基于套接字的替代方案。