基于Java实现WebSocket快速上手

首先我们声明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很重要

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值