使用Spring Boot,Spring WebSocket和Undertow接收大型子协议消息时遇到了一些麻烦。 16kB后消息被切断。在做了一些挖掘之后,我发现了以下配置属性,它看起来像我想要的那样:
function Figuri() {
var playerCount = 50;
this.players = [];
for (var p=0; p<playerCount; p++){
players.push(new Player());
}
figurkiNames.forEach(function(figura) {
});
for (var y = 1; y <= 2; y++) {
for (var i = 0; i < 8; i++) {
this.players[y].push(new Figurka(i, figurkiNames[i], y, i+1, 8))
}
for (var i = 8; i < 16; i++) {
this.players[y].push(new Figurka(i, "peshka", y, i-7, 7))
}
}
}
在检查/ configprops执行器端点时,似乎可以正确选择此配置属性。不幸的是,这似乎没有帮助接收大于16kB的消息。
我也偶然发现了Undertow文件中的这条不祥之处(强调我的):
对于服务器,理想大小通常为16k,因为通常是可通过write()操作写出的最大数据量(取决于操作系统的网络设置)
这确认了我所遇到的设置server.undertow.buffer-size=32768
无效,因为它受操作系统级别设置的限制。当我使用Ubuntu Linux时,我一直在摆弄server.undertow.buffer-size
和net.core.rmem_*
设置但这些似乎也没有任何效果。在macOS上无法重现此问题。
有谁知道如何配置Undertow,Spring Boot和/或Spring WebSocket来支持这些消息?
答案 0 :(得分:0)
我直接回答了上面的问题。我在Spring Boot 中提出的设置工作!我们遇到的问题是负载平衡器,在我们的案例中是haproxy,在它之前是在16kB之后切断消息。调整haproxy以允许更大的消息解决了这个问题。与此同时,我们调整了我们使用的协议以提高效率,因此我们不再需要这些大型消息,因此我们的haproxy解决方案未在生产中进行测试(YMMV)。
因为开发人员都在使用macOS和Windows,并且问题只发生在运行Ubuntu的验收和生产环境中,我们错误地认为这是原因。
经验教训(这些都非常愚蠢和基本,但无论如何我们犯了这些错误):