运行 NSApplication.shared 和 Vapor 一起?

Running NSApplication.shared alongside Vapor?

我希望我的 Vapor 应用程序能够在主机上创建和显示 NSWindows。为此,我编辑了 main.swift 如下:

import AppKit
import App
import Vapor

var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)
let app = Application(env)
defer { app.shutdown() }
try configure(app)

DispatchQueue.init(label: "com.myapp.vapor", qos: DispatchQoS.userInteractive).async {
    try! app.run()
}

NSApplication.shared.run()

所以Vapor在单独的队列中运行,而NSApplication在主队列中运行。这可行,但我需要在 Vapor 处理程序中调用 DispatchQueue.main.async,我想避免它。是否可以扩展 Vapor 应用程序并将其设置为应用程序委托?

Vapor 不使用 Dispatch,所以我怀疑您总是需要将任何处理 UI 的调用包装在 DispatchQueue.main.async.

一个选项是将 DefaultResponder 替换为将请求处理放在主循环中的内容。但是,您需要弄清楚如何让 Dispatch 和 NIO 发挥良好的作用。另一种选择是在你的路由处理程序中调用一个应用程序委托,然后它可以在主线程上做它喜欢的事情。