四时宝库

程序员的知识宝库

Spring Boot 集成 socket.io 后端实现消息实时通信

概述

基于 socket.io 来说,采用 node 实现更加合适,本文使用两个后端的开源框架实现,服务端使用 netty-socketio ,客户端使用socket.io-client。使用 Scheduledexecutorservice 实现消息可配置任务调度。


socket.io

socket.io:是一个面向实时 web 应用的 JavaScript 库。它使得服务器和客户端之间实时双向的通信成为可能。他有两个部分:在浏览器中运行的客户端库,和一个面向Node.js的服务端库。两者有着几乎一样的API。像Node.js一样,它也是事件驱动的.

Socket.IO 主要使用WebSocket协议。但是如果需要的话,Socket.io可以回退到几种其它方法,例如Adobe Flash Sockets,JSONP拉取,或是传统的AJAX拉取,[2]并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。


项目搭建

引入依赖包

Java

创建服务端类 SocketServer

Java

Java

  1. initServer 方法 初始化服务端本地 9090 端口;

  2. startServer 方法中,添加一系列事件监听器,并根据事件作出响应;

  3. 通过 server.start() 启动服务端,server.stop() 停止服务端;

创建客户端类 SocketClient

Java

Java

Java

Java

Java

Java

Java

  1. 通过 initSocket 初始化客户端,初始化地址 http://localhost:9090;

  2. 通过 new ScheduledThreadPoolExecutor(10),初始化任务调度线程池;

  3. 使用 Map 用于存放每个进来任务的 future ,key:为任务id,value:future,目的是为了可以通过条件控制任务,通过接口调用可以 cancel 对应的 future;

  4. 通过 connectSocket 连接服务端,并调用 addConnectListenerEvent 添加一些列监听事件;

  5. 通过 startClient 启动任务。

  6. 通过 HandleMessageRunnable 类实现具体消息的处理。

创建定时任务调度控制器 ScheduledController

Java

Java

  1. 调用 http://localhost:8080/socket-demo/start/{id}?startTime=yyyyMMddHHmmss 接口可以控制指定任务在指定时间开始执行;

  2. 调用 http://localhost:8080/socket-demo/end/{id} 取消指定任务;

  3. 调用 http://localhost:8080/socket-demo/end 可以手动接收当前在执行的所有任务,scheduledExecutorService.shutdown() 不会强制所有任务立即停止,而是会在正在执行的本次任务执行完后才 shutdown;

  4. 这里使用到了 @Scheduled ,需要到 Application 类中的加上 @EnableScheduling 注解以开启定时任务;

  5. stopClient 方法可以定时结束所有任务,以节省资源,这个根据业务自身决定是否需要。

修改 Appingcation 类


运行效果

  1. 启动项目

  2. 调用 http://localhost:8080/socket-demo/start/{id}?startTime=yyyyMMddHHmmss 接口启动任务。

Java

3.查看控制台信息,注意 2 的时间和现在的时间,未到时间:

Java

到时间:

Java

4.再次调用 http://localhost:8080/socket-demo/start/{id}?startTime=yyyyMMddHHmmss 加入新任务:

Java

Java

5.http://localhost:8080/socket-demo/end/{id},可以取消任务。

6.http://localhost:8080/socket-demo/end 结束所有任务。

以上所述是小编给大家介绍的Spring Boot 模块组成,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的!

Java学习资料(复制下段链接至浏览器即可)

data:textml;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==

Java

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接