有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jawampa最大WebSock框架尺寸?

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

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

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

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

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

在demo文件夹中有两个。java文件:Client.javaServer.java 运行/启动这两个选项,每个选项都应显示一个GUI。然后执行以下过程(C=客户端,S=服务器):

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

根据消息的大小,您将在IDE的控制台上看到不同的输出。消息的大小可以通过size整数变量在Client.java行137中更改。如上所述:如果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

正如您所看到的,已接收事件丢失,因此未收到事件。但是,有已完成的事件测试。事件,但数据明显缺失

总之,在运行上面的示例时可以看到,当传输字符串的大小大于70000时,事件没有正确接收。此问题可能与netty有关,因为它是在jawampa的发动机罩下使用的。感谢您的帮助。也许只是一些小的配置可以解决这个问题

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

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

编辑3 aka解决方案:根据开发人员的建议(请参见here),应将NettyWampConnectionConfig.java:8中的变量DEFAULT_MAX_FRAME_PAYLOAD_LENGTH更改为更高的值。然后一切都像一个符咒


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    jawampa中存在错误,原因是DEFAULT_MAX_FRAME_PAYLOAD_LENGTH比Crossbar中的默认分割帧大小低1位。所以DEFAULT_MAX_FRAME_PAYLOAD_LENGTH应该只增加1个比特,或者交叉杆拆分帧大小应该减少1个比特。 另外,如果您更改DEFAULT_MAX_FRAME_PAYLOAD_LENGTH,则应该使用builder:.withConnectionConfiguration((new NettyWampConnectionConfig.Builder()).withMaxFramePayloadLength(65536).build())