java 使用 websocket

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

 1.导入websocket依赖

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

2.代码

@ServerEndpoint("/webSocket/{userId}")
@Component
@Slf4j
public class SocketServer {
    /**
     * 与某个客户端的连接会话,需要通过它来给客户端发送数据
     */
    private Session session;
    /**
     * 接收userId
     */
    private String userId = "";

    private static AtomicInteger onlineNum = new AtomicInteger();

    /**
     * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
     */
    public static ConcurrentHashMap<String, SocketServer> webSocketMap = new ConcurrentHashMap<>();

    static IScreenService screenService;
    @OnOpen
    public void onOpen(Session session,@PathParam("userId") String userId){
        this.session = session;
        this.userId = userId;
        if (webSocketMap.containsKey(userId)) {
            webSocketMap.remove(userId);
            webSocketMap.put(userId, this);
        } else {
            webSocketMap.put(userId, this);
            addOnlineCount();
        }

        log.info(userId+"加入WebSocket,当前人数为:"+onlineNum);
        try {
            sendMessage("连接成功!");
            // 链接成功以后发送数据
            Scheduler scheduler = CronUtil.getScheduler();
            boolean started = scheduler.isStarted();
            if (!started){
                // 支持秒级别定时任务
                CronUtil.setMatchSecond(true);
                log.info("定时任务开启....");
                createSchedule();
                CronUtil.start();
            }
        } catch (Exception e) {
            log.error("用户连接异常",e);
        }
    }

    /**
     * 定时推送消息
     */
    public void createSchedule(){
        CronUtil.schedule("*/1 * * * * ?", new Task() {
            @Override
            public void execute() {
                try {
                    // todo 处理逻辑
                } catch (Exception e) {
                    log.error("日报数据查询异常!");
                    e.printStackTrace();
                }
            }
        });
    }

    @OnClose
    public void onClose() {
        if (webSocketMap.containsKey(userId)) {
            webSocketMap.remove(userId);
            //从set中删除
            subOnlineCount();
        }
        log.info("用户退出:" + userId + ",当前在线人数为:" + onlineNum);
    }


    /**
     * 发送信息
     * @param message
     * @throws IOException
     */
    public void sendMessage(String message) throws IOException {
        if(ObjectUtil.isNotNull(session)){
            synchronized (session){
                session.getBasicRemote().sendText(message);
            }
        }
    }
    public static void addOnlineCount(){
        onlineNum.incrementAndGet();
    }

    public static void subOnlineCount() {
        onlineNum.decrementAndGet();
    }

}

3.配置文章来源地址https://www.toymoban.com/news/detail-507052.html

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



    @Autowired
    public void serScreenService(ScreenServiceImpl screenService){
        SocketServer.screenService = screenService;
    }

}

到了这里,关于java 使用 websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 解决使用conda env create -f environment.yml安装依赖包时Installing pip dependencies过慢的问题

    问题描述 使用conda env create -f environment.yml安装依赖包时,会遇到Installing pip dependencies过慢的问题。这是由于没有使用镜像源。如下图所示 解决方案 可以尝试对environment.yml文件进行以下修改,添加镜像源即可: 将channels改为(注意要把default去掉): 并在pip的依赖包里添加上镜

    2024年02月12日
    浏览(51)
  • uniapp安装npm依赖,导入,使用

    1.本文以uniapp安装并使用动画组件animate为案例书写,其余组件可使用相同方法套用 2.第一步现在先打开命令行,检查npm是否已经正确安装,输入npm -v ,返回版本号则证明npm安装正常,如有问题,自行百度npm安装 3.npm环境正常,在命令行打开项目根目录,例如:E:XXXXXXX 4.输入

    2024年02月09日
    浏览(38)
  • 什么是依赖注入(Dependency Injection)?

    依赖注入(Dependency Injection,简称DI)是一种设计模式,用于实现类之间的解耦和依赖关系的管理。它通过将依赖关系的创建和维护责任转移到外部容器中,使得类不需要自己实例化依赖对象,而是由外部容器动态地注入依赖。 传统的对象创建方式往往由类自身负责创建和管

    2024年02月15日
    浏览(38)
  • 【Python开发】FastAPI 07:Depends 依赖注入

    在 FastAPI 中, Depends 是一个依赖注入系统,用于注入应用程序中所需的依赖项,通过 Depends ,我们可以轻松地将依赖项注入到 FastAPI 路由函数中。简单来说,Depends 依赖注入的目的就是将代码重复最小! 目录 1 Depends 使用 1.1 依赖注入介绍 1.2 demo 1.3 OpenAPI 集成 2 不同依赖项

    2024年02月08日
    浏览(41)
  • vue-package.json中的dependencies(生产依赖)和devDependencies(开发依赖)

     以下所有安装命令都会对node_modules生效,即安装都会安装到node_modules中,删除也会中从node_modules中删除 1、不会添加到package.json中 2、会添加到package.json的dependencies中 ,build时会打进去, 3、会添加到package.json的devDependencies中   参考package.json中的dependencies(生产依赖)和devD

    2024年02月13日
    浏览(45)
  • 【VC++开发必备神器 -- Dependencies,查看依赖库DLL,支持win10,比depends更好用】

    软件之Dependencies,不同于depends 1、微软官方有提供depends,可以查看exe文件的依赖库,仅适用于winxp/win7/win8,但是不能用于win10,会卡死报错. 官网下载:Dependency Walker (depends.exe) Home Page 左上角第一个窗口是Dll信息窗口,显示程序所需的Dll模块。 如何使用Depends.exe查看dll动态链

    2024年02月05日
    浏览(47)
  • Angular 17+ 高级教程 – Dependency Injection 依赖注入

    本来是想先介绍 Angular Component 的,但 Component 里面会涉及到一些 Dependency Injection (简称 DI) 的概念,所以还是先介绍 DI 吧。 温馨提醒:如果你对 JS class、prototype 不太熟悉的话,建议你先看这篇 JavaScript – 理解 Object, Class, This, Prototype, Function, Mixins   首先我们有一个 class Ser

    2024年03月09日
    浏览(61)
  • IDEA库(Libraries)和模块依赖(Dependencies)详解

    库是模块可以依赖的已编译代码的集合。在IntelliJ IDEA中,可以在三个级别上定义库: 全局 (可用于许多项目), 项目 (可用于 项目 中的所有模块)和 模块 (可用于一个模块) 简单来说,IDEA中的库(Libraries)就是用来存放外部jar包,我们的项目或模块需要某些jar包时,

    2024年01月25日
    浏览(40)
  • 快速入门使用spring详细步骤(介绍、导入依赖、第一个简单程序)

    目录 一、spring介绍 二、spring使用步骤 (一)创建maven项目  (二) maven项目导入spring依赖 (三)开始编写第一个spring程序 三、新篇章之springboot(额外篇) spring是作为Java EE企业级开发很好的一个框架,这篇文章就来讲解一下怎么使用spring。要使用spring,现在一般都是 使用

    2024年02月04日
    浏览(48)
  • depends_on 解决 docker 容器依赖问题

    如果你经常使用 docker-compose 启动服务的话,可能会遇到下面的问题: 服务 B 依赖服务 A,需要服务 A 先启动,再启动服务 B 举个例子,在部署 kafka 集群的时候,需要启动两个kafka,并使用zookeeper做注册中心,docker-compose.yaml 文件如下 此时会同时启动 3 个容器,zookeeper、kafka

    2024年02月08日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包