java - javapan最大websocket帧大小?

标签 java netty wamp-protocol

发布事件时参数是否有最大大小?

我使用此代码(java):wampClient.publish(token, response.toString());

response.toString() 在我的例子中是一个很长的 json 字符串。它有大约 70,000 个字符。我怀疑该事件未发布,因为当我用短字符串替换 response.toString() 时,该事件会按预期发布。

我对 Wamp 的内部结构了解不多,并且对代码的初始调试 session 并没有为我提供太多见解。正如我上面所说,我认为长字符串导致了一些问题。

最小运行示例:要获取最小运行示例,请从此处下载示例 java 项目:http://we.tl/a3kj3dzJ7N并将其导入到您的 IDE 中。

在 demo 文件夹中有两个 .java 文件:Client.javaServer.java 运行/启动它们,并且每个都应该出现一个 GUI。然后执行以下过程(C = 客户端,S = 服务器):

C: hit start
S: hit start
C: hit publish

根据消息的大小,您将在 IDE 的控制台上看到不同的输出。消息的大小可以在 Client.java第 137 行中通过 size 整数变量进行更改。如上所述:如果 size 低于 70000(例如 60000),一切都会按预期工作。 Client.java 的控制台输出如下:

Open Client
Session1 status changed to Connecting
Session1 status changed to Connected
Publishing
Received event test.event with value 10000

但是,如果整数变量 size 更改为 70000(或更高),则输出如下:

Open Client
Session1 status changed to Connecting
Session1 status changed to Connected
Publishing
Completed event test.event
Session1 status changed to Disconnected
Session1 status changed to Connecting
Session1 status changed to Connected

正如您所看到的,缺少已接收事件...,因此未收到该事件。然而,有Completed event test.event,但数据明显丢失。

综上所述,运行上面的例子可以看到,当传输的字符串大小大于70000时,事件没有被正确接收。这个问题可能与netty有关,因为它在 jawampa 的底层使用。任何帮助表示赞赏。也许只是一些小配置就可以解决这个问题。

编辑1:我用一个可以下载的最小运行示例更新了问题。

编辑2:我想我现在知道问题的根源(但完全不确定,请参阅EDIT3)。它与java中字符串文字允许的大小有关。请参阅:Size of Initialisation string in java 在上面的例子中,我可以反射(reflect)出这一点。如果 size 变量小于 65535 个字符,则有效,否则无效。有解决方法吗?

编辑 3 又名解决方案: 根据开发人员的建议(请参阅 here ),NettyWampConnectionConfig.java:8 中的变量 DEFAULT_MAX_FRAME_PAYLOAD_LENGTH应更改为更高的值。那么一切都会像魅力一样发挥作用。

最佳答案

根据开发人员的建议(请参阅 here ),变量 DEFAULT_MAX_FRAME_PAYLOAD_LENGTH可以通过NettyWampConnectionConfig覆盖类,您可以将其提供给 NettyWampClientConnectorProvider类(class)。显然,变量值应该增加。

关于java - javapan最大websocket帧大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208217/

相关文章:

java - 在 Java 中处理验证的好习惯是什么

java - 将 Java SE 应用程序打包到可执行 Jar 中

java - 连接速度慢会影响netty性能吗?

java - 为什么我的maven构建在执行时找不到Netty的EventLoopGroup类?

java - Netty、字符串和冲洗

websocket - 使用自签名证书时无法从 Electron 连接到 Web 套接字

java - 按文件夹模式搜索文件

java - Gradle 复制任务的包含和排除规范

python - 使用 Crossbar/Autobahn 用于用户通知的身份验证?

c# - 多客户端 RPC