是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何?

2024-01-23

据 Apple 介绍,Lion 中引入的新 XPC Services API 为与 Grand Central Dispatch (GCD) 和 launchd 集成的基本进程间通信提供了一种轻量级机制。

似乎可以使用这个 API 作为一种 IPC,就像 POSIX IPC,但是,我找不到如何做到这一点。

我正在尝试使用 XPC API 来通信两个进程,以便我可以在它们之间传递消息,但我总是在服务器端收到“XPC 连接无效”错误。

我不需要 XPC 服务,我只想使用客户端-服务器架构交换消息。

我正在使用两个类似 BSD 的进程,所以没有 Info.plist 或其他什么......

我一直在关注这个讨论http://lists.macosforge.org/pipermail/launchd-dev/2011-November/000982.html http://lists.macosforge.org/pipermail/launchd-dev/2011-November/000982.html但这个话题似乎有点晦涩难懂并且没有记录。

Thanks!


是的,这是可能的,但不是您期望的方式。

You can not有一个(非启动的)进程提供服务。这是出于安全原因,因为这使得中间人攻击变得很容易。

不过,您仍然可以实现您想要的目标:您必须设置一个启动服务来提供 XPC / mach 服务。然后进程 A 和 B 都连接到您启动的服务。然后进程A可以创建一个所谓的匿名连接并将其发送到 launchd 服务,该服务会将其转发给进程 B。一旦发生这种情况,进程 A 和 B 就可以通过该连接直接相互通信(即 launchd 服务可以退出而不会中断连接)。

这看似迂回,但出于安全原因这是必要的。

See the xpc_object(3)有关匿名连接的详细信息的手册页。

这有点违反直觉,因为进程 A 将创建一个listener对象与xpc_connection_create()。然后 A 创建一个endpoint来自侦听器的对象xpc_endpoint_create()并通过线路(通过 XPC)将该端点发送到进程 B。然后 B 可以将该对象转换为与xpc_connection_create_from_endpoint()。 A 的事件处理程序listener然后将收到一个与 B 创建的连接相匹配的连接对象xpc_connection_create_from_endpoint()。这与事件处理程序的工作方式类似xpc_connection_create_mach_service()当客户端连接时将接收连接对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何? 的相关文章

随机推荐

  • 在 MongoDB 中将一天增加到日期

    如何在文档中将日期增加 7 天 而无需手动设置日期 Collection Data id ObjectId 5e302f83edd1fd00125abbf9 dateTransferred 2020 01 26T00 00 00 000 0
  • Jersey 无法将 json 请求映射到类

    我能够使用 Json 输出运行 Jersey 并且能够使用 Json 映射获取 GET 请求 没有任何问题 我还有一些 JSON 方法 它们是 POST 方法 它们映射到 Java 类 就像这个方法一样 POST Consumes Medi
  • 如何重建已下载的编辑过的 Raku 模块?

    我已经安装了 Time Duration 但它的大部分测试都失败了 我希望能够通过我的编辑从本地存储的模块重建模块 我编辑了包含该模块的文件 对应于 Duration pm6 perl6 sources D00C101A0157E3EAC4
  • Google PubSub - 计算主题中的消息数

    我查看了 Google 的 PubSub 文档 并尝试查看 Google Cloud Monitoring 但找不到任何方法来确定我的主题中的队列大小 由于我计划使用 PubSub 进行分析 因此监控队列计数对我来说很重要 这样我就可以增加
  • 修改实体模型后每个属性的“X 和 X 之间存在歧义”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在对实体模型中的每个属性进行小更改并尝试重新编译后 我都会收到 XYZ EntityX PropertyX 和 XYZ
  • JavaScript“Console”对象及其所有 API 的源代码

    JavaScript Console 对象 当前所有现代浏览器中都存在的 JavaScript 调试控制台 的实现细节是否开源 我在哪里可以找到该 Console 对象本身的源代码 包括其所有 API 函数 例如 console log c
  • Chrome 打包应用中的聚合物

    Google 和 Polymer 发布的新 Material Design 是轻松创建此类设计的最佳库之一 如果不是唯一的话 是否有人使用该库开发 Chrome 打包应用程序以获得其提供的 Material Design 外观 目前 它受到
  • 没有 ToolBarManager 的黑莓标签栏

    我想为我的黑莓项目创建一个具有精确外观和感觉的工具栏 任何帮助是极大的赞赏 请注意 我无法使用 ToolBarManager 我的项目应该支持OS 5 0之后的所有设备 Thanks 这是如何在黑莓中创建选项卡的示例代码 之后我一共看了 3
  • 如何测试具有外部依赖项的 Webpack 包?

    总的来说 我对 Webpacker 和 Rails 还很陌生 我最近开始使用 Webpacker 来捆绑 React 组件 由于应用程序的一部分仍然使用资产管道 因此一些依赖项仍然存储在vendor assets javascript 并可
  • 在实现表单关闭的 WPF MVVM 模式时获取“仅在创建窗口并显示为对话框后才能设置 DialogResult”

    我正在尝试实施this https stackoverflow com a 3329467 713683WPF 表单关闭的 MVVM 模式也在此进行了解释blog http blog excastle com 2010 07 25 mvvm
  • 我可以使用 JOOQ 作为 SQL 解析器吗?

    我正在尝试解析 Java 中的 SELECT 语句 我熟悉 JOOQ 并希望使用它 我知道它并没有明确设计为 SQL 解析器 实际上它的功能远不止于此 因此我认为可能有一种方法可以使用其内部解析器来解析 SELECT 查询 我看到了一些有关
  • 将旧的 mysql 与 PDO 混合

    我正在编写一个使用一些遗留代码的应用程序 较新的代码使用 PDO 而较旧的代码使用原始 mysql 库 第一个代码中的事务中输入了大量数据 以便我可以在错误时回滚 但是在某些时候会调用遗留代码并需要查看相同的数据 除非连接是共享的 否则旧代
  • 快速排序递归深度 O(n) 的堆栈空间不会导致堆栈溢出?

    在最坏的情况下 快速排序递归深度需要 O n 的堆栈空间 为什么在最坏的情况下它不会导致大集合的堆栈溢出 顺序颠倒 如果在枢轴的两侧进行递归 那么在最坏的情况下 它确实会导致足够大的数据的堆栈溢出 这就是为什么没有人在生产代码中使用简单的快
  • 将图像序列化为字符串

    论坛里的好朋友 我一直在搜索很多 但我找不到如何序列化图像并将其传递给 android 中的字符串 可能并非如此 如果有人知道并想告诉我 我将非常感激 虽然java awt Image类不是 未实现 java io Serializable
  • C# 检查复选框状态的更清晰方法?

    我有以下代码 它将布尔值列表作为参数 然后通过单独验证列表来设置每个检查列表的检查状态 有没有更有效的方法来编写以下代码 例如 通过使用循环 public PointCtrlRowSelectionForm List
  • 将函数应用于 R 中的数据帧列表

    我需要有关如何以迭代方式管理列表的帮助 我有以下清单list它由多个具有相同列但行数不同的数据框组成 例子 1 id InpatientDays ERVisits OfficeVisits Narcotics 1 a 0 0 18 1 2
  • 使用 .aar NoClassDefFoundError 但类存在并且已 Dexed

    我有几个项目是为了创建 aar 而构建的 然后我将此 aar 导入到 Android Studio 的 libs 下 此依赖项的 build gradle 文件如下所示 repositories flatDir dirs libs depe
  • 我如何将 ╚ 放入批处理文件中

    我正在尝试在批处理文件中添加行 等 但是将它们直接插入批处理文件中会产生一些我没有输入的奇怪字符 我正在使用记事本 通过alt 200键入这些字符或者取决于我想要的字符 Windows 10 和命令提示符版本 10 0 10240 有什么解
  • 如何在node.js中使用基本身份验证从url获取用户名和密码? [复制]

    这个问题在这里已经有答案了 我需要获取浏览器从 url 发送到我的 node js 应用程序的用户名和密码 我挖掘了各种文档和对象 但找不到任何有用的东西 有人知道该怎么做吗 使用身份验证标头不是一个选项 因为现代的 Bowser 不设置它
  • 是否可以像IPC一样使用Mac OS X XPC在进程之间交换消息?如何?

    据 Apple 介绍 Lion 中引入的新 XPC Services API 为与 Grand Central Dispatch GCD 和 launchd 集成的基本进程间通信提供了一种轻量级机制 似乎可以使用这个 API 作为一种 IP