gpt4 book ai didi

swift - 在服务器启动期间使用 Perfect 终止 Swift-Server 的最佳实践是什么?

转载 作者:行者123 更新时间:2023-11-28 06:29:19 29 4
gpt4 key购买 nike

我正在使用 Perfect 服务器端 Swift,并且在 main.swift 中有一些条件,服务器应该在实际启动之前终止。是否有处理此终止的最佳做法?

目前,我正在抛出一个错误,因为 return 不起作用——因为它不在函数的上下文中(参见 This is the error I'm throw and关注。 下面)。这是我到目前为止所拥有的:

//
// main.swift
//

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

enum ServerStartupError : Error {
case FailedUserControllerSetup
}


if !UserController.setup() {
// This is the error I'm throwing and concerned about.
throw ServerStartupError.FailedUserControllerSetup
}

let server = HTTPServer()
let serverRoutes = ServerRoutes()
serverRoutes.addRoutes(server: server)
server.serverPort = 8181

do {
// Launch the HTTP server.
try server.start()
} catch PerfectError.networkError(let err, let msg) {
print("Network error thrown: \(err) \(msg)")
}

最佳答案

对不起,我的错,我误会你了!请注意,在 main.swift 的顶层抛出是没有意义的,因为唯一会捕获该错误的进程是操作系统。请尝试以下代码:

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer

if UserController.setup() {
let server = HTTPServer()
let serverRoutes = ServerRoutes()
serverRoutes.addRoutes(server: server)
server.serverPort = 8181

do {
// Launch the HTTP server.
try server.start()
} catch PerfectError.networkError(let err, let msg) {
print("Network error thrown: \(err) \(msg)")
} catch (let panic) {
print("panic: \(panic)")
} //end server starting

} else {

// here is the code that prompting user to finish the setup
// before running the server. The program will display this
// message and automatically exit the process (end of program)
print("Setup is not completed.")

}//end if

或者,您也可以使用 exit() 函数从 main.swift 执行退出,并导入 Foundation(标准库),如下所示:

//
// main.swift
//

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer
import Foundation

if !UserController.setup() {
// This is the error I'm throwing and concerned about.
print("ServerStartupError.FailedUserControllerSetup")
exit(-1)
}//end if

let server = HTTPServer()
let serverRoutes = ServerRoutes()
serverRoutes.addRoutes(server: server)
server.serverPort = 8181

do {
// Launch the HTTP server.
try server.start()
} catch PerfectError.networkError(let err, let msg) {
print("Network error thrown: \(err) \(msg)")
} catch (let panic) {
print("Panic: \(panic)")
}
exit(0)

这两种方法各有利弊。第一个不需要任何其他东西,而第二个需要 Foundation Library;另外我要说的是,第二个更传统,可以提供退出代码,它允许您通过将错误包装在自定义引导加载程序或其他东西中来捕获错误。 Unix/Linux 使用退出代码来检查应用程序进程信息,在某些情况下,您可以在系统日志中看到这些退出代码(如果有)。

关于swift - 在服务器启动期间使用 Perfect 终止 Swift-Server 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833634/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com