java - 在单独的线程中初始化 Ktor 可以吗?
问题描述
我正在寻找允许创建桌面 JVM 应用程序的库,该应用程序具有在 LAN 上侦听移动客户端连接的服务器功能。JSON 配置和二进制数据将由客户端下载。找到Ktor,看来符合要求。
我可以在单独的线程中运行 Ktor 以监控其在主 UI 线程中的状态吗?我发现创建应用程序运行 Ktor 阻塞主线程的示例。“状态”是指连接的客户端数量、文件下载进度、基于其答案的客户端状态。
或者应该有其他方式来启动 Ktor,例如启动一个单独的进程并共享配置?或者使用另一个服务器库?
解决方案
相信您会对使用embeddedServer
配置类型感兴趣。
创建服务器后,您需要调用start
which 接受一个参数,该参数wait: Boolean
在其 KDoc 中声明:
/**
* Starts this [ApplicationEngine]
*
* @param wait if true, this function does not exit until application engine stops and exits
* @return returns this instance
*/
public fun start(wait: Boolean = false): ApplicationEngine
尚未执行任何测试来验证调用server.start(false)
不会阻塞主线程,但从文档中它确实看起来像您要查找的内容。
我希望我有帮助
编辑
我刚刚尝试过的示例代码:
fun main(args: Array<String>): Unit {
val server = embeddedServer(Netty) {
}
server.start()
println("Hello!")
}
产生这个输出:
所以我会说server.start()
and server.start(false)
(这是相同的,因为默认情况下,参数设置为 false 不会阻塞主线程,您可以与 Ktor 并排运行您的应用程序
推荐阅读
- python - 如何通过 Selenium Webdriver 查找具有动态 id 的元素
- matplotlib - .whl 文件无法从 pypi 网站下载
- r - 将列连接并求和 R
- java - 我们可以为同一个端点同时实现@pathparam 和@queryparam
- excel - 需要具有逗号分隔值的列的数据透视表
- javascript - 如何进行切换 onclick 以隐藏和显示视频播放器的 UI?
- text - 如何分解文本块,使其每行仅显示一个单词
- html - 正则表达式年龄验证 17-120
- c# - 你如何以html形式表示一个json数组
- python - Matplotlib极坐标轮廓图:跨越theta原点连续