已超出 Websocket 最大帧长度 65536

Websocket max frame length of 65536 has been exceeded

在我的 Scala 应用程序中,我使用网络套接字来获取请求和发送响应。当我尝试通过 Web 套接字传递 base64 字符串时出现异常

org.jboss.netty.handler.codec.frame.CorruptedFrameException: Max frame length of 65536 has been exceeded.

我尝试了以下解决方案来解决我的问题

export SBT_OPTS="-Xms1024m -Xmx3084m -XX:MaxPermSize=1024m -Dhttp.netty.maxInitialLineLength=2621440"

它在 Mac OS 中运行良好。但是,当我在 windows(将导出更改为设置)和 Ubuntu 机器中尝试相同的解决方案时,它不起作用。我收到相同的异常消息。请帮我解决这个问题。提前致谢

想办法增加 WebSocket 帧的最大大小。例如,在 Java、Session.<a href="http://docs.oracle.com/javaee/7/api/javax/websocket/Session.html#setMaxTextMessageBufferSize-int-" rel="nofollow">setMaxTextMessageBufferSize(int)</a> and Session.<a href="http://docs.oracle.com/javaee/7/api/javax/websocket/Session.html#setMaxBinaryMessageBufferSize-int-" rel="nofollow">setMaxBinaryMessageBufferSize(int)</a>.

为网络套接字设置的默认缓冲区大小为“65536”。所以你应该增加 application.conf 文件中的 websocket 缓冲区大小。

您可以按如下所示设置限制。

play.websocket.buffer.limit=2621440

在我的例子中,我手动创建了 AsyncHttpClient。所以我只是设置 config

httpClient = new DefaultAsyncHttpClient(new DefaultAsyncHttpClientConfig.Builder()
    .setMaxRequestRetry(0)
    .setWebSocketMaxBufferSize(1024000)
    .setWebSocketMaxFrameSize(1024000).build());

如果您通过 Injector 创建此对象,则添加

play.websocket.buffer.limit=2621440

变成application.conf。