在后端更新时将数据发送到前端

问题描述 投票:7回答:3

我的Web应用程序的后端接收来自多个客户端的更新。 当发生此类更新时,应将其传达给所有其他客户端。

当我的后端更新时,如何从服务器向所有Web浏览器客户端发起更新?

我正在使用JBoss,JSF和Spring框架。

java java-ee jquery
3个回答
9
投票

请参阅类似的堆栈溢出队列: WebSockets与Server-Sent events / EventSource

我假设,正如DarthVader所做的那样,你的前端是某种(通常)无状态的HTML页面。 浏览器中的东西。 如果您希望自动推送所有客户端,则有三种选择:

彗星 :(已弃用)
Comet本质上是在发出没有请求超时限制的AJAX请求。 您发出请求,它就在那里并根据需要通过它传输数据。 这可以使用隐藏的iFrame或标准XMLHTTPRequests(jQuery可以为您包装)来完成。 您可以 在此处详细了解此方法。

长轮询:
实质上,您使用javascript setInterval方法不断轮询服务器以进行更改。 只需设置一个对服务器执行标准AJAX GET请求的时间间隔,并在每次成功时相应地更新您的页面。

浏览器API

  • HTML5 WebSockets
    使用任何类型的基于事件的后端(Twisted,EventMachine,node.js等)使WebSockets成为理想的解决方案。 只需让所有客户注册后端,并在任何给定客户提交后,将更改推送给所有其他客户。 您可以在此页面上阅读更多(并查看一个很好的示例)WebSockets。 浏览器支持=> canIuse

  • 服务器发送事件(SSE)
    通过服务器发送的事件 ,服务器可以随时通过将消息推送到网页来将新数据发送到网页。 这些传入的消息可以被视为网页内的事件+数据。 浏览器suppport => canIuse


3
投票

当你说前端时,你正在谈论无状态的http客户端。

您无法将任何内容从Web服务器推送到http或无状态客户端。

如果使用从前端到后端的异步调用,定期执行此操作的“技巧”。

想想gmail,当你收到一封新邮件时,你认为它显示你有一封电子邮件。 您可以浏览器,将Asynch调用发送到gmail服务器,如果有新消息,则显示它。

所以客户是无国籍的。 使用Ajax。

这是清楚的吗?


0
投票

有两种方法可以解决这个问题。未来应该遵循Websockets这样的标准

现在你仍然坚持使用Comet ,它实际上是向服务器发送请求并保持打开状态(不发出响应结束信号),只是通过它传输数据(停放他们称之为的请求)。 或定期轮询,您只需在每个预定义的时间间隔内向服务器发出一个AJAX请求,询问服务器是否有新的要求。 毋庸置疑,第一项工作需要在服务器和浏览器上提供流媒体支持,但在大多数情况下更有效。

© www.soinside.com 2019 - 2024. All rights reserved.