objective-c - XCode(Objective C)和C程序之间的进程间通信

标签 objective-c c macos xcode7

我正在开发一个包含两个独立服务的 OS X 桌面应用程序。第一个在 C 中实现,在后台收集数据并将它们转发给第二个,一个在 Objective C 中实现的 UI。更新后,UI向C程序响应一个确认,程序之间存在双向通信。

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

我正在使用 XCode。

最佳答案

在用完全不同的东西换掉你的主要工作实现之前,值得尝试调整它以消除不必要的延迟。这样做可能就像通过 setsockopt() 修改套接字选项一样简单。特别是,听起来您可能会从禁用 Nagle's algorithm 中受益。在涉及的套接字上,通过设置 TCP_NODELAY 选项。此示例代码是从 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 更好的选择,而且它仍然是一个套接字接口(interface)。

您还可以考虑其他替代方案,例如管道(每个方向一个)、消息队列和共享内存方法的几种变体,但鉴于您的出发点,我什至不会考虑其中任何一个排除基于套接字的替代方案。

关于objective-c - XCode(Objective C)和C程序之间的进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40021683/

相关文章:

iphone - UIAlertView 操作和取消按钮

objective-c - iOS 11 与 bundleProxy 崩溃!= 使用 UNUserNotificationCenter 时出现 nil 错误

c - 打印数据并给出开始和结束

c++ - '从 some_type** 到 const some_type** 的无效转换'

c++ - 结构的 { 0 } 和 { { 0 } } 之间的区别

ios - UICollectionView 标题标题消失后

ios - Xcode : UITableViewCell customization like Facebook

macos - 在 Mac 上运行时找不到 Docker 命令

macos - 创建证书以通过 bash 在 Mac OS X 上签署 GDB

c - C 标准库结构在 macOS 或 Linux 上的编译器和库版本之间是否兼容?