后端更新时将数据发送到前端[重复]

Posted

技术标签:

【中文标题】后端更新时将数据发送到前端[重复]【英文标题】:Send data to front end when back end updates [duplicate] 【发布时间】:2012-01-29 15:49:04 【问题描述】:

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

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

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

【问题讨论】:

一个小评论,虽然 Spring 本身是一个很棒的框架,但 JBoss 可能不需要它,因为它已经包含与 Spring 直接重叠的技术(例如 EJB 和 CDI)。 【参考方案1】:

查看类似的堆栈溢出问题:WebSockets vs. Server-Sent events/EventSource

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

Comet:(已弃用)Comet 本质上是在发出没有请求超时限制的 AJAX 请求。您提出请求,它就坐在那里并根据需要通过它流式传输数据。这可以通过隐藏的 iFrame 或标准 XMLHTTPRequest(jQuery 可以为您包装)来完成。您可以阅读有关此方法的更多信息here。

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

浏览器 API

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

Server-sent event (SSE) 使用server-sent events,服务器可以随时通过向网页推送消息来向网页发送新数据。这些传入的消息可以被视为网页内的事件+数据。 浏览器支持 => canIuse

【讨论】:

【参考方案2】:

当您说前端时,您是在谈论无状态 http 客户端。

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

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

想想 gmail,当您收到一封新电子邮件时,您认为它如何显示您有一封电子邮件。您不断浏览,向 gmail 服务器发送异步调用,如果有新消息,它就会显示它。

所以客户端是无状态的。使用 Ajax。

这清楚吗?

【讨论】:

【参考方案3】:

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

现在你被Comet 卡住了,它本质上是向服务器发送一个请求并保持它打开(不是发出响应结束的信号)并且只是通过它流式传输数据(停放他们称之为的请求)。或定期轮询,您只需在每个预定义的时间间隔向服务器发出 AJAX 请求,以询问服务器是否有新内容要说。不用说,第一个解决方法需要服务器和浏览器都支持流式传输,但在大多数情况下效率更高。

【讨论】:

以上是关于后端更新时将数据发送到前端[重复]的主要内容,如果未能解决你的问题,请参考以下文章

二、解决SpringMVC前端发送到后端中文乱码问题

AJAX/jQuery 在提交时将前端用户输入作为 NULL 发送到 MYSQL。有啥解决办法吗? (SpringMVC、Eclipse、JSP)

如何更新骨干模型并将其发送到快递后端

通常无法将图像从前端发送到云端或后端

如何将 html 数据从节点 js 发送到前端?

防重幂等