1

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

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

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

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

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

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

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

根据消息的大小,您将在 IDE 的控制台上看到不同的输出。可以通过整数变量在第 137 行更改消息的大小。正如上面已经解释的:如果低于 70000(例如 60000),一切都按预期工作。的控制台输出如下:Client.javasizesizeClient.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

如您所见,Received 事件 ...丢失,因此未收到该事件。但是,有Completed 事件 test.event,但数据明显丢失。

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

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

编辑 2:我想我现在知道问题的根源(虽然完全不确定,请参阅 EDIT3)。它与java中字符串文字的允许大小有关。请参阅:Java 中初始化字符串的大小 在上面的示例中,我可以反映这一点。如果 size 变量小于 65535 个字符,则有效,否则无效。有解决方法吗?

EDIT 3 aka SOLUTION:正如开发人员所建议的(参见此处),NettyWampConnectionConfig.javaDEFAULT_MAX_FRAME_PAYLOAD_LENGTH :8中的变量应更改为更高的值。然后一切都像魅力一样。

4

2 回答 2

1

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

于 2015-08-26T13:14:50.397 回答
0

jawampa 中存在错误,原因DEFAULT_MAX_FRAME_PAYLOAD_LENGTH是 Crossbar 中的默认分割帧大小比默认分割帧大小低 1 口。所以DEFAULT_MAX_FRAME_PAYLOAD_LENGTH应该只增加 1 咬或横杆拆分框架大小应该降低 1。此外,如果您更改DEFAULT_MAX_FRAME_PAYLOAD_LENGTH,则应使用构建器进行更改:.withConnectionConfiguration((new NettyWampConnectionConfig.Builder()).withMaxFramePayloadLength(65536).build())

于 2020-01-27T11:51:24.000 回答