SwiftNIO:如果代码在类中,则connect不起作用

SwiftNIO:如果代码在类中,则connect不起作用,swift,swift-nio,Swift,Swift Nio,我刚开始使用SwiftNIO,第一次使用了以下代码: let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) let bootstrap = ClientBootstrap(group: group) // Enable SO_REUSEADDR. .channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), va

我刚开始使用SwiftNIO,第一次使用了以下代码:

let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let bootstrap = ClientBootstrap(group: group)
    // Enable SO_REUSEADDR.
    .channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
defer {
    try? group.syncShutdownGracefully()
}

do {
    let channel = try bootstrap.connect(host: "127.0.0.1", port: 1234).wait()
    try channel.closeFuture.wait()
} catch let error {
    print(error)
}
它工作正常,我得到一个错误,因为我的服务器没有运行

但是如果我把代码带到一个类中,什么也不会发生:

class Client {

    let bootstrap: ClientBootstrap

    init() {
        let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
        self.bootstrap = ClientBootstrap(group: group)
            // Enable SO_REUSEADDR.
            .channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
        defer {
            try? group.syncShutdownGracefully()
        }
    }

    func connect(host: String, port: Int) throws {
        let channel = try self.bootstrap.connect(host: host, port: port).wait()
        try channel.closeFuture.wait()
    }
}

let client = Client()
do {
    try client.connect(host: "127.0.0.1", port: 1234)
} catch let error {
    print(error)
}

我做错了什么?

原始代码在什么上下文中运行?在init方法中看到
延迟
是不常见的,尤其是在末尾-它将在init完成后立即执行,而原始代码中的延迟将在执行do/catch块后执行


您可能希望关机代码位于
客户机
类的
deinit
方法中

只是我自己发现的。对不起,那个愚蠢的问题,你完全正确!我强烈建议不要使用
deinit
关闭多线程EventLoop组。如果Denit从您试图关闭的EventLoop运行(并且您无法控制从中运行线程Denit),这可能会导致死锁或崩溃。通常,一个进程应该有一个EventLoopGroup。我建议将EventLoopGroup传递到init中,而不是在那里创建它。main.swift是创建EventLoopGroup的好地方。@johanneswess我相信你是对的:)。我对SwiftNIO一无所知,我只是在评论问题中的代码。谢谢你的澄清