【发布时间】:2017-02-25 01:04:27
【问题描述】:
假设我有以下 Java 代码。
get("/", (request, response) -> {
Map<String, Object> attributes = new HashMap<>();
//attributes.put("message", "Hello World!");
return new ModelAndView(attributes, "index.ftl");
}, new FreeMarkerEngine());
那来自 Spark。当我导航到 localhost:portnumber/ 时,我看到 index.ftl 呈现,让我们假设(此处未编码)显示来自该应用程序的数据库中的数据。但是假设我想动态更新 index.ftl。假设另一个用户从另一个应用程序实例更新了数据库(此处未编码),我想在第一个用户的页面上显示 index.ftl 中的新更改。在不必重新渲染页面的情况下如何做到这一点?
您不能简单地在 Java 端设置一个计时器,它每 10-20 毫秒提取一次新数据。这也将是对连接时间的巨大浪费。是否可以以某种方式 ping 数据库已更新的 Java 代码?像数据库的监听器一样?
这不仅是个问题,而且您如何能够将新收到的数据推送到 index.ftl 而无需重新渲染?
【问题讨论】:
-
你的意思是像Server-Sent Events这样的东西吗?
-
或者Websockets(根据this tutorial)
-
@UnholySheep 这正是我的意思,但是对于 Java 后端。在 Javascript 中,AJAX 是要走的路。如何在 Spark 框架中发出服务器发送的请求?
-
@UnholySheep 我明白了。我前段时间确实遇到过那个教程。现在认为 WebSocket 技术已经过时了吗?一般来说,当然?它被认为是不好的做法吗?尤其是现在一切都是 AJAX?
-
我不是当前趋势方面的专家,但 AJAX、Websockets 和 SSE 的 IMO 用法完全不同。 AJAX 适用于仅从客户端启动的所有内容(并且通常与 RESTful 服务结合使用),SSE 仅适用于服务器需要通知客户端,而 Websockets 适用于两种方式的(“实时”)通信。我认为它们中的任何一个都不应该被认为是过时的,这完全取决于您的用例
标签: java freemarker spark-java