两种实现WebSocket的方式,基于Java实现WebSocket。

发布时间:2024年01月12日

首先我们声明WebSocker方便打字为ws。

WebSocker ws = new WebSocket();

1,首先是导包啦

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

或者说启用spring框架,因为spring已经整合了ws。

2,编写配置类

配置类:把spring中的ServerEndpointEx

@Configuration//说明他是一个配置类--》作用就是注入bean
public class WSConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

porter对象注入进来

3,编写服务终端类

用iava注解来

监听连接@ServerEndpoint、

连接成功@OnOpen、

连接关闭@OnClose、

收到消息等状态@OnMessage等

//这个类的作用:监听客户端谁连接了服务端。
@ServerEndpoint("/myWs")    //编写监听的连接地址
@Component                  //被扫描到注入spring管理对象
@Slf4j                      //打印日志
public class wsServerEndpont {
    //为了方便找到个session,所以使用了Hashmap。如果使用list需要遍历集合。
    //为了线程安全使用ConcurrentHashMap。
    static Map<String, Session> map = new ConcurrentHashMap<>();


    @OnOpen  //客户端连接到服务端的时候,声明服务端做的事情
    public void onOpen(Session session) { //每一个web连接对于服务端都是一个session
        //连接之后保留这段session。
        map.put(session.getId(), session);
    }

    @OnMessage //收到客户端消息,执行的操作
    public String onMessage(String str) { //接收到的消息
        log.info("收到的消息{}", str);
        return "已收到消息";     //返回的消息
    }

    @OnClose //用户连接关闭时执行的操作。
    public void onClose(Session session) {
        map.remove(session.getId());
        log.info("浏览器以退出");
    }

    //实现定时任务
    @Scheduled(fixedRate = 2000)  //每隔多少秒执行定时任务
    public void sengMsg(String message) throws IOException {
        //向每个客户端发送请求
        for (String s : map.keySet()) {                 //遍历对象
            map.get(s)                                  //或与session对象
                    .getBasicRemote()                   //获取session的远端
                    .sendText("想每一台用户");         //发送那个业务
        }
    }

}

@OnOpen 获取的session很重要

文章来源:https://blog.csdn.net/weixin_55990599/article/details/135549305
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。