如何使用 UNIX 域套接字在 Swift 中设置 IPC

问题描述 投票:0回答:2

我需要为Mac设置一些相对简单的IPC,并且需要使用UNIX域套接字来完成。我对 Swift 是全新的,所以虽然我知道这是可能的,但我什至在创建我的客户端和服务器时都在努力。我发现了一些在其他语言中使用 UNIX 域套接字的有用资源(比如这个:IPC using Unix Domain Sockets),但是我发现的任何基于 swift 的内容都超出了我目前在该品牌中可以遵循的范围新语言。如果有人能像我 5 岁一样解释它,或者至少为我指出正确的方向,我将不胜感激。

swift macos ipc unix-socket
2个回答
0
投票

也许这个演示项目可以提供帮助。在这里尝试引用有点太多了,但它将

CFSocket
包装在一个看起来不错的 Swift 包装器中。它似乎也是纯 Swift 的。

这篇post(勉强)展示了如何在 NIO 中做到这一点。


-3
投票

如果您更熟悉其他语言 - 使用其他语言进行操作,然后合并到 Swift 中。

就我个人而言,我相信每种语言都应该用在它最擅长的事情上。 Swift 并没有真正在任何低级的东西上做得最好,但它可以使用用其他语言编写的库,这些库实际上在这些方面做得很好。

您可以使用 C 或 C++ 编写库,使用您可能觉得方便的套接字,然后围绕它制作 Objective-C/C++ 包装器,然后使用桥接标头导入 Objective-C/C++ 包装器并使用它快速代码。

这可能在代码大小上有点开销,但与 Swift 中所有这些丑陋的 Unsafe*** 东西相比,它看起来更好并且可调试性更好。

对于 5 岁部分: 0)创建2个项目:Objective-C/C++静态库、Swift控制台应用程序

  1. 将 .h 文件中的一些不错的 API 写入 lib,例如“创建、读取、写入”函数,使用您在 C 或 C++ 中找到的资源来实现它们。
  2. 使用 Objective-C/C++ API 将其他 .h 文件写入 lib。 您确实可以保留名称和参数,只需将类型更改为 NS* (std::string 或 char* -> NSString* 等),并使其看起来像类。实现传递到.m/.mm相关文件中的C/C++部分。
  3. 构建项目1,你应该得到一个.a(静态)库。
  4. 将桥接标头(这是一个术语,你可以在 google 上搜索)添加到您的 Swift 应用程序中,导入 Objective-C/C++ 标头。将 .a 库添加到构建阶段(将二进制文件与库链接)。 使用您创建的 Objective-C/C++ 类,就像它是用于 unix 套接字 IPC 的 Swift 类一样。
© www.soinside.com 2019 - 2024. All rights reserved.