新泽西州的异步响应和服务器发送事件与何时使用它们有什么区别?泽西岛的异步响应和服务器发送的事件有什么区别?
回答
两者都用于不同的用途,一个允许等待慢速资源(长轮询),另一个允许在同一个TCP连接上发送数据流。
下面是更详细地:
AsyncResponse
在JAX-RS 2被引入,以便执行长轮询请求。- 客户端打开的连接
- 客户端发送请求负载
- 服务器接收的有效载荷,暂停/暂停的连接,并寻找资源
- 然后
- 如果超时已达到服务器可以结束连接
- 资源就绪,服务器恢复连接并发送资源有效载荷。
- 连接已关闭
由于这是JAX-RS规范的一部分,所以你可以使用默认球衣依赖使用它。请注意,在没有传输数据的连接太长的情况下,防火墙等网络设备可以关闭TCP连接。
Server-Sent Events是一个specification,它允许服务器在同一个TCP连接上发送消息。
- 客户端采用javascript
EventSource
来获取资源 - 然后服务器可以在某个时间点发送有效载荷的消息。
- 然后另一个
- 等等
- 的连接可以通过编程在任何时间由客户端或服务器关闭。
SSE不是JAX-RS的一部分,所以你需要有泽西SSE模块在类路径(additionaly泽西2的早期版本中,你不得不编程启用
SseFeature
)。其他的事情要考虑:
- SSE不允许通过自定义页眉,所以没有授权头。可以使用URL查询字符串,但如果您不在HTTPS上,则会出现安全问题。
- SSE确实允许POST数据,所以这可能在URL查询字符串
- 由于网络(设备故障,防火墙,电话不在覆盖区域等),连接可以关闭。)
在我看来,websockets比SSE更灵活,甚至允许客户端发送多条消息。但是Jersey没有实现支持websocket的JEE规范(JSR 356)。
- 客户端采用javascript
不过说真的,你应该阅读自己的SSE implementation,他们的喜欢什么是轮询,什么网络插座附加信息的文档。
AsyncResponse就像一个等待时间长的ajax轮询。客户端启动单个AJAX请求来检查更新,直到它接收到数据或发生超时并触发另一个请求才会返回。它确实创建了不必要的检查循环(在服务器端),负载等同于连接的客户端数量。更多的客户端,更多的循环启动=需要更多资源。
服务器发送的事件有点类似于服务器端的长轮询,都使用循环来检查更新并触发响应。唯一的区别是长轮询会连续发送请求(在超时或接收数据后),而SSE只需要发起一次。因此,当考虑电池使用时,SSE更适合移动应用。
Websocket也使用循环,但不仅用于检查更新;也可以在握手后监听新连接并升级到WS/WSS的连接。与长轮询和上证所不同,负载随着客户端数量的增加而增加,websocket像守护进程一样不停地运行循环。除了常量循环之外,随着更多客户端连接到套接字,负载也会增加。例如,如果您正在设计一个用于管理目的的Web服务,那么在长时间轮询和SSE上运行的服务器可以在办公时间后无人休息时休息,而websocket将继续运行,等待连接。我提到没有适当的身份验证,任何人都可以创建一个客户端并连接到您的websocket?大多数情况下,认证和拒绝连接不是在握手部分完成的,而是在连接完成后完成的。
我应该继续如何在多个选项卡上实现websocket?
- 1. 泽西岛和weblogic服务器发送的事件
- 2. Forever-frame和服务器发送的事件有什么区别?
- 3. 不同的泽西岛测试容器有什么区别?
- 4. Guice 3.0与泽西岛和异步Servlets
- 5. 异步Web服务中的newFixedThreadPool泽西岛
- 6. HTTP流媒体和服务器发送的事件有什么区别?
- 7. 泽西岛REST服务 - 在Tomcat中的404响应
- 8. 什么是泽西岛2.0
- 9. Websocket,服务器发送事件(SSE)和HTTP2的服务器推送之间有什么区别?
- 10. 泽西岛给404-没有发现有效的服务
- 11. 什么是泽西岛过滤器?
- 12. 泽西岛和Struts2
- 13. 请求,响应和服务器之间有什么区别?
- 14. 与泽西岛和ExtJS文件上传的响应
- 15. 泽西岛异常Java 1.8
- 16. 泽西岛验证异常
- 17. 由websphere包装的泽西岛错误响应“com.ibm.ws.webcontainer.webapp.WebAppErrorReport:内部服务器错误”
- 18. 网络服务器和应用服务器有什么区别
- 19. 泽西岛 - 验证REST服务参数
- 20. POST JSON到泽西岛服务
- 21. 异步私有和私有异步的区别是什么?
- 22. 泽西岛没有显示的情况下,它的响应
- 23. 泽西岛
- 24. 基于泽西岛的@pathparm服务器的RESTful Android客户端
- 25. 尝试上传文件到JAX-RS(泽西岛)服务器
- 26. 泽西岛没有触发ContainerRequestFilter
- 27. @path和@queryparam在泽西岛
- 28. 授权RolesAllowedDynamicFeature和泽西岛
- 29. 内置HTTP服务器的运行泽西岛
- 30. 泽西岛:在泽西岛以外的地方重定向