我的web应用程序的后端接收来自多个客户端的更新。当发生这样的更新时,应该将其传达给所有其他客户机。
当后端更新时,如何从服务器启动到所有Web浏览器客户端的更新?
我使用的是jboss、jsf和spring框架。


最佳答案:

参见类似的堆栈溢出问题:WebSockets vs. Server-Sent events/EventSource
我假设,正如darthvader所做的,您的前端是某种(通常)无状态的html页面。浏览器中的内容。如果希望自动推送所有客户端进行更改,则有三个选项:
Comet:(已弃用)
comet本质上是发出没有请求超时限制的ajax请求。你提出请求,它就在那里,根据需要通过它传输数据。这可以通过隐藏iframe或标准xmlhttprequest(jquery可以为您包装)完成。您可以阅读有关此方法的更多信息。
长轮询:
本质上,您可以使用javascripthere方法不断地轮询您的服务器以获取更改。只需设置一个对服务器执行标准ajax get请求的间隔,每次成功时,都会相应地更新页面。
浏览器API
setInterval
使用任何类型的基于事件的后端(twisted、eventmachine、node.js等)使HTML5 WebSockets成为理想的解决方案。只需让所有客户机在后端注册,然后在任何给定客户机提交后,将更改推送到所有其他客户机。您可以在WebSockets上阅读更多(并看到一个很好的示例)websockets。浏览器支持=>this page
canIuse
使用Server-sent event (SSE),服务器可以通过将消息推送到网页,随时向网页发送新数据。这些传入消息可以被视为网页中的事件+数据。
浏览器支持=>server-sent events