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

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

WebSocker ws = new WebSocket();

1,首先是导包啦

        
            org.springframework.boot
            spring-boot-starter-websocket
        

或者说启用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 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很重要

你可能感兴趣的:(java,websocket,sql)