美文网首页
spring boot 集成 websocket

spring boot 集成 websocket

作者: SevenCoder | 来源:发表于2021-04-13 21:58 被阅读0次

    最近正好项目升级,用到websocket,改写原来那些繁琐代码!!

    1. 原生注解

    pom.xml

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-websocket</artifactId>

    </dependency>

    WebSocketConfig

    */packagecn.coder4j.study.example.websocket.config;

    importorg.springframework.context.annotation.Bean;

    importorg.springframework.context.annotation.Configuration;

    importorg.springframework.web.socket.config.annotation.EnableWebSocket;

    importorg.springframework.web.socket.server.standard.ServerEndpointExporter;

    @Configuration

    @EnableWebSocket

    public  class  WebSocketConfig{

    @Bean

    public ServerEndpointExporter serverEndpoint(){

    returnnewServerEndpointExporter();

    }

    }

    说明:

    这个配置类很简单,通过这个配置 spring boot 才能去扫描后面的关于 websocket 的注解

    WsServerEndpoint

    packagecn.coder4j.study.example.websocket.ws;

    importorg.springframework.stereotype.Component;

    importjavax.websocket.OnClose;

    importjavax.websocket.OnMessage;

    importjavax.websocket.OnOpen;

    importjavax.websocket.Session;

    importjavax.websocket.server.ServerEndpoint;

    importjava.io.IOException;

    importjava.util.HashMap;importjava.util.Map;

    @ServerEndpoint("/myWs")

    @Component

    public class WsServerEndpoint{

    /**

        * 连接成功

        *

        * @param session

        */@OnOpenpublicvoidonOpen(Session session){System.out.println("连接成功");}/**

        * 连接关闭

        *

        * @param session

        */@OnClosepublicvoidonClose(Session session){System.out.println("连接关闭");}/**

        * 接收到消息

        *

        * @param text

        */

    @OnMessage

    public String onMsg(String text)throws IOException{

    return"servet 发送:"+text;

    }

    }

    说明

    这里有几个注解需要注意一下,首先是他们的包都在 **javax.websocket **下。并不是 spring 提供的,而 jdk 自带的,下面是他们的具体作用。

    @ServerEndpoint

    通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是 8080,而这个注解的值是 ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用

    @OnOpen

    当 websocket 建立连接成功后会触发这个注解修饰的方法,注意它有一个  Session 参数

    @OnClose

    当 websocket 建立的连接断开后会触发这个注解修饰的方法,注意它有一个  Session 参数

    @OnMessage

    当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值

    @OnError

    当 websocket 建立连接时出现异常会触发这个注解修饰的方法,注意它有一个  Session 参数

    另外一点就是服务端如何发送消息给客户端,服务端发送消息必须通过上面说的 Session 类,通常是在@OnOpen 方法中,当连接成功后把 session 存入 Map 的 value,key 是与 session 对应的用户标识,当要发送的时候通过 key 获得 session 再发送,这里可以通过session.getBasicRemote().sendText(*)* 来对客户端发送消息。

    相关文章

      网友评论

          本文标题:spring boot 集成 websocket

          本文链接:https://www.haomeiwen.com/subject/qthhlltx.html