You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OkHttp WebSocket无法监听服务器消息问题排查求助

排查OkHttp WebSocket无法接收服务器消息的问题

以下是针对你的代码和场景的排查方向及解决方案:

1. 先修正URL路径错误

你的WebSocket URL存在多余斜杠:hmcpapi//wss,这会导致服务器路径解析异常,直接修正为:

val url = "wss://infomapapp.com/hmcpapi/wss?userId=4"

2. 确认WebSocket连接是否成功建立

查看onOpen方法的日志输出:

  • 如果没有打印WebSocket connection opened,说明连接未建立:
    • 检查AndroidManifest.xml是否添加网络权限:<uses-permission android:name="android.permission.INTERNET" />
    • 若服务器使用自签SSL证书,需给OkHttp配置自定义信任管理器,否则会触发SSL握手失败
    • 增加OkHttp超时配置,避免连接超时:
      val client = OkHttpClient.Builder()
          .connectTimeout(10, TimeUnit.SECONDS)
          .readTimeout(30, TimeUnit.SECONDS)
          .writeTimeout(30, TimeUnit.SECONDS)
          .build()
      

3. 验证是否真的收到了服务器消息

服务器返回的是两个JSON对象直接拼接的格式,先在onMessage中确保完整打印收到的文本:

override fun onMessage(webSocket: WebSocket, text: String) {
    Log.d("WebSocket", "Raw message received: $text")
    // 后续解析逻辑
}
  • 如果打印了完整文本,说明消息已收到,问题出在parseMessage方法
  • 如果没有打印,说明服务器未发送消息,或消息帧格式不符合WebSocket规范

4. 修复JSON解析逻辑

服务器返回的是两个独立JSON对象拼接的字符串,单个JSON解析器无法处理,需要拆分后再解析:

private fun parseMessage(text: String): List<ChatsItem> {
    return try {
        // 按空格分割多个JSON对象
        text.split(" ").filter { it.isNotEmpty() }.map {
            Gson().fromJson(it, ChatsItem::class.java)
        }
    } catch (e: Exception) {
        Log.e("ParseError", "解析失败: ${e.message}", e)
        emptyList()
    }
}

同时给parseMessage添加异常捕获,避免解析失败导致后续代码终止执行。

5. 管理WebSocket生命周期

  • 确保OkHttpClient是全局单例,不要每次创建新实例
  • 在Activity销毁时主动关闭WebSocket,避免资源泄漏:
    override fun onDestroy() {
        super.onDestroy()
        webSocket?.close(NORMAL_CLOSURE_STATUS, "页面销毁")
    }
    

6. 测试服务器WebSocket服务可用性

用第三方工具(如wscat)直接连接服务器,验证服务是否正常:

# 安装wscat
npm install -g wscat
# 连接服务器
wscat -c wss://infomapapp.com/hmcpapi/wss?userId=4

如果工具也收不到消息,说明问题在服务器端,需排查服务器的WebSocket推送逻辑。

内容的提问来源于stack exchange,提问作者MãĴď

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:11:16