Springboot集成websocket实现消息推送和在线用户统计

这篇具有很好参考价值的文章主要介绍了Springboot集成websocket实现消息推送和在线用户统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

在启动类上添加一个bean

@SpringBootApplication
public class CommonCodeApplication {

    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }

    public static void main(String[] args) {
        SpringApplication.run(CommonCodeApplication.class, args);
    }
}

核心代码

@Component
@ServerEndpoint("/websocket2/{username}")
@Slf4j
public class WebSocketDemo2 {

    private static Map<String, WebSocketDemo2> webSocketMap = new HashMap<>();

    private static Integer onlineUserCount = 0;

    private Session session;

    private String username;

    /**
     * 建立连接
     * @param username
     * @param session
     */
    @OnOpen
    public void onOpen(@PathParam("username") String username, Session session){
        this.username = username;
        this.session = session;
        webSocketMap.put(username, this);
        int count = addOnlineUser();
        log.info("当前在线用户:{}", count);
    }

    /**
     * 关闭连接
     * @param username
     */
    @OnClose
    public void onClose(@PathParam("username") String username){
        webSocketMap.remove(username);
        int count = reduceOnlineUser();
        log.info("当前在线用户:{}", count);
    }

    @OnMessage
    public void onMessage(String message) throws IOException {
        JSONObject jsonObject = JSONUtil.parseObj(message);
        String target = jsonObject.getStr("target");
        String msg = jsonObject.getStr("msg");
        if (target.equals("all")){
            sendMessageAll(msg);
        }
    }

    /**
     * 给特定的人发消息,用于业务中调用
     * @param usernames
     * @param message
     * @throws IOException
     */
    public void sendMessageSpecial(List<String> usernames, String message) throws IOException {
        for (String username : webSocketMap.keySet()) {
            for (String target : usernames) {
                if (username.equals(target)){
                    webSocketMap.get(username).session.getBasicRemote().sendText(message);
                }
            }
        }
    }

    /**
     * 给所有人发消息
     * @param message
     * @throws IOException
     */
    public void sendMessageAll(String message) throws IOException {
        for (WebSocketDemo2 item : webSocketMap.values()) {
            System.out.println("消息发送");
            item.session.getBasicRemote().sendText(message);
        }
    }



    public void sendMessage(String message) throws IOException {
        session.getBasicRemote().sendText(message);
    }

    /**
     * 用户离线
     * @return
     */
    public int reduceOnlineUser(){
       return  -- onlineUserCount;
    }

    /**
     * 累加在线用户
     * @return
     */
    public int addOnlineUser(){
        return ++ onlineUserCount;
    }

}

实现消息推送只要在业务代码中调用sendMessageSpecial()方法即可。

@RestController
@RequestMapping("/websocket")
public class WebSocketController {

    @Autowired
    private WebSocketDemo2 webSocketDemo2;

    @GetMapping("/t1")
    public String test1() throws IOException {

        System.out.println("这是业务代码...");
        
        String message = "消息被督办了!";
        List<String> usernames = new ArrayList<>();
        usernames.add("张三");
        usernames.add("李四");
        usernames.add("王五");
        webSocketDemo2.sendMessageSpecial(usernames, message);
        
        return "ok";
    }

}

然后调用刚才的业务接口测试:http://localhost:8080/websocket/t1
调用成功后可以看到三个窗口中都收到了消息
Springboot集成websocket实现消息推送和在线用户统计文章来源地址https://www.toymoban.com/news/detail-400141.html

到了这里,关于Springboot集成websocket实现消息推送和在线用户统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot+WebSocket 消息推送 校验 心跳机制 PING-PONG 用户分组等

            WebSocket PING-PONG心跳机制,只需要服务端发送PING,客户端会自动回应PONG,本文中使用了两个@OnMassage注解一个用于接收Text消息,一个用于接收PONG响应消息,此外还有二进制格式( InputStream  ,byte[], ByteBuffer  等)。            说明:               记录

    2024年02月11日
    浏览(31)
  • uniapp:全局消息是推送,实现app在线更新,WebSocket,apk上传

    背景 : 开发人员开发后app后打包成.apk文件,上传后通知厂区在线用户更新app。 那么没在线的怎么办?因为我们在上一篇博客中写了,在app打开的时候回去校验是否需要更新了,所以已经完成了闭环。 即时通讯首先想到的就是WebSocket 1.我们定义全局的WebSocket 2.在全局监听,

    2024年02月03日
    浏览(29)
  • SpringBoot+Netty+Websocket实现消息推送

    这样一个需求:把设备异常的状态每10秒推送到页面并且以弹窗弹出来,这个时候用Websocket最为合适,今天主要是后端代码展示。 添加依赖 定义netty端口号 netty服务器 Netty配置 管理全局Channel以及用户对应的channel(推送消息) 管道配置 自定义CustomChannelHandler 推送消息接口及

    2024年02月04日
    浏览(34)
  • Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

          假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的资源是否有更新。                         在长时间不更新

    2024年02月16日
    浏览(37)
  • SpringBoot整合Netty+Websocket实现消息推送

           Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。以下是Netty的主要优势: 高性能 :Netty基于NIO(非阻塞IO)模型,采用事件驱动的设计,具有高性能的特点。它通过零拷贝技术、内存池化技术等手段,进一步提高

    2024年01月20日
    浏览(30)
  • Springboot整合WebSocket实现主动向前端推送消息

            在上篇文章tcp编程中,我们实现了C++客户端与java服务器之间的通信,客户端发送了一个消息给服务器,今天我们要实现基于WebSocket实现服务器主动向前端推送消息,并且以服务器接收到C++客户端的消息主动向前端推送消息的触发条件。 WebSocket 的诞生背景       

    2024年03月16日
    浏览(32)
  • SpringBoot+Netty+Vue+Websocket实现在线推送/聊天系统

    ok,那么今天的话也是带来这个非常常用的一个技术,那就是咱们完成nutty的一个应用,今天的话,我会介绍地很详细,这样的话,拿到这个博文的代码就基本上可以按照自己的想法去构建自己的一个在线应用了。比如聊天,在线消息推送之类的。其实一开始我原来的想法做在

    2024年02月03日
    浏览(30)
  • SpringBoot集成WebSocket,实现后台向前端推送信息

    在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下。 WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道

    2024年01月16日
    浏览(27)
  • uni-app使用plus本地推送通知栏信息,不使用第三方个推实现消息在线统一推送、消息通知(MQTT、WebSocket、setInterval定时器)

    plus.push.createMessage() 因项目一直是运行在内网,所以不支持使用uni-push等运行在公网的第三方个推渠道。 那就只能使用 plus.push.createMessage() ,示例代码如下: 参数解释: content : ( String 类型) 必选,消息显示的内容,在系统通知中心中显示的文本内容。 payload : ( String 类型 ) 可

    2024年02月15日
    浏览(33)
  • Springboot集成SSE实现消息推送之单工通信

    通常在一些web项目中,会涉及到想客户端推送消息,常见的有Ajax轮询、webSocket,本篇文章主要使用Springboot集成SSE实现向客户端持续推送信息。 服务发送事件SSE(Sever-Sent Event),就是基于 HTTP 的技术,浏览器向服务器发送一个保持长连接HTTP请求,服务器单向地向客户端以流形

    2024年01月17日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包