我正在尝试设计一个 SwiftNIO 服务器,其中多个客户端(如 2 个或 3 个)可以连接到服务器,并且在连接后,它们都可以从服务器接收信息。
为此,我创建了一个共享并添加到连接客户端的每个管道的ServerHandler
类。
let group = MultiThreadedEventLoopGroup(numberOfThreads: 2)
let handler = ServerHandler()
let bootstrap = ServerBootstrap(group: group)
.serverChannelOption(ChannelOptions.backlog, value: 2)
.serverChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.childChannelInitializer { $0.pipeline.addHandler(handler) }
.childChannelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
上面的代码灵感来自https://github.com/apple/swift-nio/blob/main/Sources/NIOChatServer/main.swift
在ServerHandler
该类中,每当有新客户端连接时,该通道就会添加到数组中。然后,当我准备好向所有客户端发送数据时,我只需遍历 , 中的通道ServerHandler
并调用writeAndFlush
.
这似乎工作得很好,但有几件事我担心:
- 似乎并不真正推荐创建共享处理程序,而是应该为每个客户端创建一个新处理程序。但是,我将如何访问需要向其发送数据的所有客户端通道?(我在由 UI 确定的时间发送数据)
- 为什么
Channel.write
似乎什么也没做?如果我使用Channel.write
而不是writeAndFlush
在服务器中使用,我的客户端将无法接收任何数据。
如果这些问题很愚蠢,我深表歉意,我SwiftNIO
最近才开始接触网络。
如果有人能给我一些见解,那就太棒了。