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

Android中org.java_websocket.client.WebSocketClient无法接收大尺寸消息

调整Java-WebSocket客户端的最大消息长度限制

当然可以调整啦!你遇到的问题正是Java-WebSocket库默认消息大小限制导致的——超过阈值的消息会被拦截或者截断,所以没法正常接收。下面给你两种可行的调整方案,按需选择就行:

方案1:针对单个连接自定义Draft(推荐)

因为你当前使用的是Draft_6455协议,我们可以在实例化这个Draft对象时,直接指定最大消息大小和最大帧大小,精准控制当前连接的限制。

修改你的代码如下:

// 根据业务需求设置最大消息大小,这里示例设为10MB(单位:字节)
int maxMessageSize = 10 * 1024 * 1024;
// 自定义Draft,指定最大消息和帧大小
Draft_6455 customDraft = new Draft_6455(
    Draft_6455.DEFAULT_ACCEPT_PROTOCOLS,
    null,
    maxMessageSize,
    maxMessageSize
);

// 使用自定义Draft创建WebSocketClient
WebSocketClient mWebsocketClient = new WebSocketClient(serverUri, customDraft, mHeaders, Constants.WEBSOCKET_CONFIG.CONNECTION_TIMEOUT) {
    @Override
    public void onOpen(ServerHandshake handshakeData) {
        Log.d(TAG, "Opened");
    }

    // 现在大消息应该能正常接收了
    @Override
    public void onMessage(String message) {
        Log.i(TAG, message);
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        Log.i(TAG, String.format("Closed. Code: %s, Reason: %s, Remote: %s", code, reason, remote));
    }

    @Override
    public void onError(Exception ex) {
        Log.i(TAG, "Error " + ex.getMessage());
    }
};

这里的参数说明:

  • 第三个参数是最大消息总大小(字节)
  • 第四个参数是单帧最大大小(字节)
    一般把两者设为相同值即可,你可以根据实际需要接收的消息大小调整这个数值。

方案2:全局设置所有连接的限制

如果你的应用中所有WebSocket连接都需要放宽消息大小限制,可以在创建任何WebSocketClient实例之前,设置全局默认值:

// 全局设置最大消息和帧大小为10MB
WebSocket.setDefaultMaxFrameSize(10 * 1024 * 1024);
WebSocket.setDefaultMaxMessageSize(10 * 1024 * 1024);

注意事项

  • 调整大小后,要确保服务器端也配置了对应的最大消息大小限制,不然可能出现客户端允许但服务器拒绝的情况,导致连接异常。
  • 不要盲目设置过大的值,要根据业务场景合理调整,避免因接收超大消息导致内存溢出问题。

内容的提问来源于stack exchange,提问作者hendrikdelarey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:11