运行 NSApplication.shared 和 Vapor 一起?
Running NSApplication.shared alongside Vapor?
我希望我的 Vapor 应用程序能够在主机上创建和显示 NSWindow
s。为此,我编辑了 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 发挥良好的作用。另一种选择是在你的路由处理程序中调用一个应用程序委托,然后它可以在主线程上做它喜欢的事情。
我希望我的 Vapor 应用程序能够在主机上创建和显示 NSWindow
s。为此,我编辑了 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 发挥良好的作用。另一种选择是在你的路由处理程序中调用一个应用程序委托,然后它可以在主线程上做它喜欢的事情。