websocket - vert.x sockJS 实现延迟消息发送

标签 websocket sockjs vert.x

我们正在为我们的 websockets 解决方案使用 vert.x sockJS 实现。当 vert.x 快速发送几条消息时,有些消息会很晚到达客户端。延迟的消息仅在发送心跳后才到达。知道这怎么可能吗?

我们通过将 sockjssocket.write() 方法放入同步块(synchronized block)中来临时解决了这个问题,但这感觉有点像黑客。我们之所以将其放在同步块(synchronized block)中是因为我们认为它与并行写入套接字缓冲区有关。

亲切的问候,

大安

最佳答案

WebSockets 是在 TCP 之上实现的协议(protocol)层。

TCP 有一些机制可以优化网络性能,并允许可靠且有序地传送流 block 。这些“优化”之一是 Nagle's algorithm ,它在满足要发送的数据包大小之前,在网络层对小块进行排队,并且仅在足够大时才发送。

在 vert.x 中未禁用该算法可能会发生什么情况。看起来像this指向您可以用来禁用它的实际设置。

如果这没有帮助,您需要确保 SockJS 库不会出于“优化”目的“重新创建”相同的机制。

该算法的目的是组合较小的 block 并作为一个数据包发送,从而减少为每个 block 携带 TCP header 的底层网络开销。如果您发送大量小块,请确保对其进行优化(自行合并),因为最好发送较大的 block 。

关于websocket - vert.x sockJS 实现延迟消息发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049643/

相关文章:

javascript - 通过 window.location 对象获取 SockJS 客户端的 URL

java-8 - Vertx 3 支持 CompletableFuture 吗?

spring-webflux - 阻塞 http 调用期间的响应式(Reactive)编程基础

java - 严格的服务器端处理(无网络浏览器交互): is Java or PHP better for this scenario?

javascript - 代理阻止 websockets?如何绕行

php - 通过tcp套接字将mysql select查询的结果从php发送到python

node.js - 如何在 Node.js 中最好地实现套接字客户端并中继到前端?

java - SockJS - '/info' 在连接服务器时导致 Http 404

docker - sockjs-node路径被webpack-dev-server baseUrl覆盖

vert.x - react 夸库斯 : Use Reactive PanacheORM with Multiple datasources