后端更新时将数据发送到前端
我的 Web 应用程序的后端从多个客户端接收更新。当发生此类更新时,应将其传达给所有其他客户端。
更新后端时,如何启动从服务器到所有 Web 浏览器客户端的更新?
我使用的是JBoss,JSF和Spring框架。
我的 Web 应用程序的后端从多个客户端接收更新。当发生此类更新时,应将其传达给所有其他客户端。
更新后端时,如何启动从服务器到所有 Web 浏览器客户端的更新?
我使用的是JBoss,JSF和Spring框架。
请参阅类似的堆栈溢出问题:WebSockets 与服务器发送的事件/事件源
我假设,就像DarthVader所做的那样,你的前端是一个(通常)无状态的HTML页面。浏览器中的某些内容。如果希望自动推送所有客户端更改,则有三个选项:
Comet:(已弃用)Comet 本质上是发出没有请求超时限制的 AJAX 请求。您发出请求,它就坐在那里,并在必要时通过它流式传输数据。这可以通过隐藏的iFrames或标准的XMLHTTPRequests(jQuery可以为您包装)来完成。您可以在此处阅读有关此方法的更多信息。
长轮询:
从本质上讲,您可以使用javascript setInterval方法来持续轮询服务器以进行更改。只需设置一个向服务器执行标准 AJAX GET 请求的时间间隔,并在每次成功时相应地更新页面。
浏览器接口
HTML5 WebSockets
使用任何类型的基于事件的后端(Twisted,EventMachine,node.js等)使WebSockets成为理想的解决方案。只需让所有客户端在后端注册,并在从任何给定客户端提交时,将更改推送到所有其他客户端。您可以在此页面上阅读更多(并查看一个很好的例子)WebSockets。浏览器支持 => canIuse
服务器发送事件 (SSE)
对于服务器发送的事件,服务器可以随时通过将消息推送到网页来向网页发送新数据。这些传入的消息可以被视为网页内的事件+数据。浏览器支持 = > canIuse
当你说前端时,你谈论的是无状态的http客户端。
您不能将任何内容从Web服务器推送到http或无状态客户端。
如果定期使用从前端到后端的异步调用,则执行此操作的“技巧”。
想想gmail,当您收到新电子邮件时,您认为它如何显示您有电子邮件。您不断浏览,将Asynch调用发送到gmail服务器,如果有新邮件,它会显示它。
因此,客户端是无状态的。使用Ajax。
这很清楚吗?