jawampa最大websockt框架尺寸?

时间:2015-08-25 15:34:39

标签: java netty wamp-protocol

发布活动时参数的最大大小是否为?

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

在我的例子中,

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

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

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

在demo文件夹中有两个.java文件:Client.javaServer.java 运行/启动它们,每个都应显示一个GUI。然后执行以下过程(C = Client,S = Server):

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

根据消息的大小,您将在IDE的控制台上看到不同的输出。可以通过Client.java整数变量在size第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

如您所见,已接收事件... 缺失,因此未收到该事件。但是,已完成事件test.event ,但数据显然已丢失。

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

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

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

EDIT 3又称解决方案:根据开发人员的建议(请参阅here),NettyWampConnectionConfig.java:8中的变量DEFAULT_MAX_FRAME_PAYLOAD_LENGTH应更改为更高的值。然后一切都像魅力一样。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

japanpa中存在错误,原因是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())