【发布时间】:2022-01-21 15:46:35
【问题描述】:
我正在尝试设计一个 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 和一般网络。
如果有人能给我一些见解,那就太棒了。
【问题讨论】:
标签: swift networking swift-nio