【问题标题】:How to write webSockets for Rest calls in Spring-boot?如何在 Spring-boot 中为 Rest 调用编写 webSockets?
【发布时间】:2018-12-01 17:29:03
【问题描述】:

我是网络套接字编程的新手。我有 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 个端点要发送和接收。

【问题讨论】:

    标签: spring-boot websocket spring-websocket java-websocket


    【解决方案1】:

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

    关于这个主题有几篇文章(google REST over WebSocket),甚至还有一些详细说明利弊的 StackOverflow 问题,例如 Is ReST over websockets possible?

    我所知道的唯一一种方法是swagger-socket,可以让您在 WebSocket 上执行类似 REST 而无需重新编写 RestController,但我不建议使用它,因为该项目现在似乎处于非活动状态并且它似乎没有被广泛使用。

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 那要看情况...不过猜猜那属于那1%...
      【解决方案3】:

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

      【讨论】:

      • 目前有链接吗?
      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2021-05-18
      • 2016-10-07
      相关资源
      最近更新 更多