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

时间:2018-06-22 09:08:21

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

我是Web套接字编程的新手。我有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) { /* ... */}
    // ....
}

我曾多次尝试在互联网上找到解决方案,但找不到它。我发现的只是聊天应用程序的示例,该示例具有两个要发送和接收的端点。

3 个答案:

答案 0 :(得分:1)

WebSockets用于双向通信,而不是真正用于REST风格的服务(在我看来,HTTP更为出色)。核心区别在于HTTP基本上是一种请求-应答协议,非常适合REST,而WebSocket则围绕消息。当然,您可以说请求-答复是基于消息的通信的一种专门技术。

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

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

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

答案 1 :(得分:1)

我可以说有99%的原因将我们带到Rest Over Websocket的原因仅仅是因为我们从错误的方向看问题。

但是我写了这样的库,因为我将在以后要编写的另一个虚拟项目中使用它,并且您可以check it out

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

我还没有启动文档,因此,您现在可以从网站上查看示例。

答案 2 :(得分:0)

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