【发布时间】:2019-12-11 14:32:49
【问题描述】:
应用程序关闭后,我的 Websocket 客户端 (OkHttp) 没有关闭连接。每次我打开应用程序时它都会打开一个新连接,这会使应用程序遭受来自广播服务器的旧 Websocket 连接和新 Websocket 连接上收到的多条消息的影响。
对于 android 客户端来说,这是正常的行为吗,至于我在 web 客户端上的经历,在标签被杀死后会话被正确关闭了吗?
我一直在互联网上查找问题,但到目前为止没有运气。我想确定这是因为我的代码逻辑错误还是只是库中的错误 Websocket 实现?
这是我在主 Activity 中启动新 websocket 会话的方式
var request: Request = Request.Builder()
.url("ws://$serverIP:8080/example/sim/speed")
.build()
var webSocketListener: WebSocketListener = object : WebSocketListener() {
override fun callback(msg: Message) {
updateSpeed(msg.content)
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
super.onClosing(webSocket, code, reason)
}
}
var webSocket = client!!.newWebSocket(request, webSocketListener)
之后updateSpeed() 将更新 UIThread 上的文本视图
应用关闭时不会触发onClosed事件,而是手动调用close函数时触发。
我确信它每次都会打开一个新套接字,因为我可以看到在服务器上创建了具有不同端口的新会话。
我想要的是让应用在关闭之前关闭它的连接。
谢谢
【问题讨论】:
-
当一端的进程退出时,您无法通过连接接收任何内容。您的代码中有一个错误,可能有几个错误,并且在服务器端。
-
@user207421,关键是在这种情况下进程仍在运行。所以当应用退出时连接应该被终止,你说的对吗?