spring boot 集成 websocket

时间:2021-7-21 作者:qvyue

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

1. 原生注解

pom.xml

org.springframework.boot

spring-boot-starter-websocket

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(*)* 来对客户端发送消息。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。