如何在 Spring-boot 中为 Rest 调用编写 webSockets?

How to write webSockets for Rest calls in Spring-boot?

我是网络套接字编程的新手。我有 10 多个用 @GetMapping 注释的方法,其中返回的数据是从 MySQL 数据库中读取的。

谁能帮我知道如何编写 WebSockets。

我的 WebRestController.java 如下所示:

@CrossOrigin(origins = "http://localhost:4200", allowedHeaders="*")
@RestController
@RequestMapping("/api")
public class WebRestController {
    @GetMapping("/summary")
    public String Summary() { /* ... */}
    @GetMapping("/erday")
    public String Erday(String erday) { /* ... */}
    @GetMapping("/count")
    public String Count(@RequestParam Map<String,String> queryParam, 
        String date, String target) { /* ... */}
    @GetMapping("/details")
    public String Details(@RequestParam Map<String,String> queryParam, 
        String date, String target) { /* ... */}
    @GetMapping("/devmawah")
    public String DevMawah(@RequestParam Map<String,String> queryParam, 
        String date, String target) { /* ... */}
    // ....
}

之前在网上试了很多次,都没有找到。我找到的所有内容都是聊天应用程序的示例,它们有 2 个要发送和接收的端点。

WebSockets 用于双向通信,而不是真正用于 REST 风格的服务(在我看来 HTTP 更胜一筹)。核心区别在于 HTTP 从根本上是一种请求-回复协议,它非常适合 REST,而 WebSocket 以消息为中心。当然,您可以争辩说请求-回复是基于消息的通信的一种特殊化。

关于这个主题有几篇文章 (google REST over WebSocket),甚至还有一些 Whosebug 问题详细说明了优缺点,例如 Is ReST over websockets possible?

据我所知,允许您通过 WebSocket 执行类似于 REST 的操作而无需重新编写 RestController 的唯一方法是 swagger-socket,但我不建议使用它,因为该项目似乎是现在不活跃,似乎还没有被广泛使用。

或者,您可以将 @RequestMapping@GetMapping 注释替换为 @MessageMapping 注释,并通过消息为您的 API 建模(例如,客户端发送 "GET" 消息发送到给定的目的地,然后您发回包含资源的消息)。

我可以说 99% 的原因让我们想到 Rest Over Websocket 只是因为我们从错误的方向看问题。

但是我写了这样的库,因为我将在我稍后写的另一个虚拟项目中需要它,你可以check it out

基本上它所做的是扫描您的控制器,并创建一个可以将数据传递给这些控制器的 websocket 处理程序,具体取决于路径、方法和输入。但是为了实现这个目标,它在内部处理了很多事情。

我还没有开始文档,所以,你现在可以从网站上查看示例。

嗯...只是我的一点贡献... 首先,你应该编写你的 websocket 处理程序(考虑到有效负载的潜在大小)。然后,你应该创建一个配置 class 来注册你的处理程序(我认为不是在 stomp 版本中)。 在您的处理程序中,在您与 websocket 服务器建立连接后,您应该有一个自定义组件来保存会话(可能是用户名映射和会话包装器)。这很有用,因为您不仅可以通过 ws 连接发送消息,还可以通过 rest api 端点发送消息(您可以访问端点或使用调度程序任务在特定条件下定期向特定用户发送消息)。 post 以后 link