jawapan 最大 websocket 帧大小?

jawampa maximum websockt frame size?

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

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

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

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

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

演示文件夹中有两个 .java 文件:Client.javaServer.java Run/Start 它们都应该出现,并且每个都应该出现一个 GUI。然后执行以下过程(C = Client,S = Server):

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

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

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

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

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

编辑 3 又名解决方案: 按照开发人员的建议(参见 here), the variable DEFAULT_MAX_FRAME_PAYLOAD_LENGTH in NettyWampConnectionConfig.java:8 应该更改为更高的值。然后一切都像魅力一样。

根据开发者的建议(见here),变量DEFAULT_MAX_FRAME_PAYLOAD_LENGTH可以通过NettyWampConnectionConfig覆盖class,你可以提供给NettyWampClientConnectorProvider class。显然,应该增加变量值。

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())