【问题标题】:How to set up IPC in Swift using UNIX domain sockets如何使用 UNIX 域套接字在 Swift 中设置 IPC
【发布时间】:2021-12-04 01:38:50
【问题描述】:

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

【问题讨论】:

  • 嘿泰勒,欢迎来到这个网站。这个问题有点过于宽泛,无法在此处以 Q/A 格式整齐地回答。尝试一点一点地分解它,我们可以帮助您解决您在此过程中遇到的更具体的问题。在大多数情况下,实际功能和您需要的一切都将与您链接的示例相同。但是,由于 C 严重依赖指针,您会看到其中许多使用 Swift 的 Unsafe(Mutable)(Buffer)(Raw)Pointer 类型桥接到 Swift,这有时很难使用。

标签: swift macos ipc unix-socket


【解决方案1】:

如果你更熟悉其他语言 - 使用其他语言,然后融入 Swift。

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

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

这可能在代码大小上有点开销,但它看起来更好,并且比在 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. 在您的 Swift 应用程序中添加一个桥接头(它是一个术语,您可以用 google 搜索它),在那里导入一个 Objective-C/C++ 标头。将 .a 库添加到 Build Phases(Link Binary with Libraries)。 使用您创建的 Objective-C/C++ 类,就像它是用于 unix 套接字 IPC 的 Swift 类一样。

【讨论】:

    猜你喜欢
    • 2014-07-24
    • 1970-01-01
    • 2014-08-31
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多