java - 在 Netty 中用返回值解析 ChannelPromise?
问题描述
我的频道有时会出现不频繁且缓慢的操作。当需要该操作时,需要停止通道上的所有处理,直到操作完成并检查返回值。我的想法是异步处理此问题并在此操作未完成时关闭 AUTO_READ。我不想为此操作阻塞 IO 线程。
我最初的想法是让我的服务代码解析 ChannelPromise 并为操作传递一个返回值。但似乎没有办法为 ChannelPromise 设置返回值?
另一个想法是让服务返回一个 CompletableFuture 并让我的处理程序代码使用 thenApply() 注册一个异步回调。然后,回调代码会将回调逻辑放置到通道的事件循环中以确保线程安全。
是否有首选或内置机制来获取 Netty 异步操作的结果?为什么 ChannelPromise 没有提供设置返回值的方法?
解决方案
您可以只使用 a Promise<T>
。
您可以通过以下方式创建一个:
Promise<ReturnType> promise = channel.eventLoop().newPromise<ReturnType>();
推荐阅读
- springdoc - 将 GroupedOpenAPI 与 SpringDoc 一起使用时如何排除路径
- bash - 如何在 bash 脚本中评估这个正确性?
- python - 如何用许多 np.arrays 创建一个 barh 图?
- laravel - tearDownAfterClass 中的 laravel phpunit db 连接
- php - 通过匹配键“同步”二维数组和一维数组 - PHP
- android - Firebase 推送通知未在屏幕上弹出 [Flutter]
- reactjs - 我可以在这个问题中使用像 setState 这样的调度吗?
- java - 构建 EAR 时的集成测试
- ios - Swift 5.1:如何将 NULL 作为参数传递?
- javascript - 如何使用热图顶点图中的数组值设置自定义工具提示?