如何在 swift 中实现多播套接字?

How to implement multicast sockets in swift?

我正在编写一个服务器,除其他外,它需要不断地在不同的多播地址中发送数据。正在发送的包裹可能会被客户端(一个应用程序)接收,该客户端将在上述地址之间切换。

我正在使用 Perfect (https://github.com/PerfectlySoft/Perfect) 来编写服务器端,但是在使用 Perfect-Net 模块或使用 CocoaAsyncSocket 时运气不佳。我如何使用 swift 实现发送方和接收方?任何可能的片段都会非常有用。

我一直在阅读有关多播的内容,当涉及到接收者时,我注意到在大多数语言中(即 java 或 c#),接收者通常指示端口号和多播 ip-地址,但何时与服务器建立连接? socket什么时候绑定到真实服务器ip地址?

提前致谢

如果我们谈论TCP/IP堆栈,只有IP和UDP支持广播和多播。它们都是无连接的,这就是为什么你只看到发送和接收到特殊的多播地址,而没有绑定和连接。您会在不同的语言中看到它,因为 (a) 协议与语言无关,并且 (b) 大多数实现都付出了合理的努力来尝试与 BSD 套接字接口兼容。

如果您想要真正的多播,您需要找到一个 swift 允许设置选项的套接字实现。此操作的常用名称是 setsockopt。多播发送方除了基本的 UDP 套接字之外不需要任何东西(我建议使用 UDP,而不是 IP),而发送方 needs to be added to a multicast group. This Python example 几乎描述了它。

但是,值得注意的是路由器不路由广播和多播。因此你不能在互联网上使用它。如果您需要在项目中使用互联网,我建议您使用 TCP - 如果您的客户端是浏览器,则使用 websockets - 并手动向 "groups" 发送消息。

我猜您实际上想要 Perfect-Kafka 或 Perfect-Mosquitto - 允许服务器向客户端订阅者发布实时流的消息队列。低级别套接字将无法轻松满足您的要求。