文档中的示例显示了对 EventLoop的现有引用,用于创建未来。
func getNetworkData(args) -> EventLoopFuture<NetworkResponse> {
let promise = eventLoop.makePromise(of: NetworkResponse.self)
queue.async {
. . . do some work . . .
promise.succeed(response)
. . . if it fails, instead . . .
promise.fail(error)
}
return promise.futureResult
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我无权访问当前的 EventLoop。有没有一种简单的方法可以访问它?
或者,我可以访问 EventLoopGroup,并且可以使用它services.lambda.client.eventLoopGroup.next()来获取 EventLoop。但这会产生额外的开销吗?我应该寻找现有的 EventLoop 吗?
你的问题里有很多疑问。所以我将回答我认为的主要问题:
我无权访问当前的 EventLoop。有没有一种简单的方法可以访问它?
您可以按如下方式初始化 EventLoopGroup,每个应用程序只需要一个。另外,根据您的使用情况,您通常可能只在numberOfThreads中使用 1 个线程,或者对于大量使用,请使用System.coreCount,它将使用所有可用的核心。
import NIO
let eventGroup = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
Run Code Online (Sandbox Code Playgroud)
此时.next()会生成一个 eventLoop 供您使用,当您的 future 完成时,它会返回以供共享重用。
在应用程序结束时,您可以按如下方式关闭:
try eventGroup.syncShutdownGracefully()
Run Code Online (Sandbox Code Playgroud)
关于此的一些注意事项:
如果您使用的是Vapor等框架,该框架已经为您设置了 eventGroup。使用他们自己的,他们会为您进行设置和关闭。
您提到services.lambda.client.eventLoopGroup.next(),所以您可能正在使用 AWS Lambda?我不熟悉它,但如果他们提供循环组,如第 1 点所示,请改用它。
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |