【问题标题】:Best practice to notify client from serverside?从服务器端通知客户端的最佳实践?
【发布时间】:2020-11-11 09:22:02
【问题描述】:
在我目前的情况下,前端客户端每隔 15 秒对后端端点 (java) 进行一次 api 调用,以查看资源是否存在。资源将通过一些业务逻辑创建。一旦资源存在,客户端就会从 api 获取数据并进行处理。
但是,每 15 秒调用一次 api 似乎是一种代价高昂的性能并且不可扩展。我想知道这方面的最佳实践 - 客户端等待资源存在以执行某些逻辑。
有没有一种方法/最佳实践将数据从服务器发送/推送到客户端,而不是相反以及单向(服务器 -> 客户端)..
提前谢谢你。
【问题讨论】:
标签:
java
web-applications
server
client
client-server
【解决方案1】:
有没有一种方法/最佳实践将数据从服务器发送/推送到客户端,而不是相反以及单向(服务器 -> 客户端)..
您刚才在此处描述的内容称为observer pattern。它的整个想法是让观察者列表附加到可观察对象,并在每次可观察对象的状态发生变化时推送通知。
您可以通过公开订阅端点来在 Java 后端实现此模式,在该端点中您可以指定要观察的内容,以及在发生状态更改时要回调的 URI 或其他一些机制推送服务器通知。但是,如果您想避免定期 API 查询,您可能必须解决另一个问题,即让您的“客户端”永久或临时充当这些通知的服务器。
显然,您希望有一个“取消订阅”端点来释放资源。您可能需要考虑如果客户端意外断开连接或由于其他原因没有参与(订阅的生存时间在这里听起来是个好主意),该怎么办。
【解决方案2】:
为了正确解决这个问题,您需要实现 WebSocket。
来自客户端的请求将是一个 GET,服务器将使用 200 状态码确认它。
然后,当服务器完成处理您的请求时,它将通过 websocket 将数据直接广播到您的 Web 应用程序。