【发布时间】:2021-06-04 08:50:07
【问题描述】:
我一直在研究一个示例 Ktor websocket 应用程序。我现在拥有的是一个托管 websocket 服务器的桌面应用程序和一个充当客户端的 android 应用程序。
我知道服务器可以跟踪其客户端。有了它,我可以确定是否连接了特定的客户端。例如,如果 android 应用程序在连接到服务器时关闭,服务器会立即知道连接丢失。
这是一个演示相同的代码sn-p,
routing {
webSocket("/endpoint") {
try {
// Connection established
} catch (e: Exception) {
// Exceptions
} finally {
// Connection is lost
}
}
}
当客户端应用程序失去互联网或关闭时,套接字连接的服务器实例立即进入finally 块。这样我们就可以确定与该客户端的连接丢失了。
如果发生相反的情况怎么办?如果服务器应用程序丢失互联网或被关闭怎么办?客户端如何将此识别为连接丢失?
我在文档中的任何地方都找不到与此相关的任何内容,这是我编写的相关客户端代码,
webSocketSession = client.webSocketSession(
method = HttpMethod.Get,
host = hostUrl,
port = port,
path = "endpoint"
)
我找不到任何可以附加到webSocketSession 对象的回调来帮助解决这个问题。即使webSocketSession.send("message") 也不会抛出任何错误。它只是悄悄地失败了。
当服务器关闭时,是否可以通知客户端,如果失败,是否有可能从webSocketSession.send() call 获得某种状态?
我真的需要了解服务器何时关闭,因此我可以尝试从客户端重新建立连接。
谢谢。
【问题讨论】: