博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot 快速实现WebSocket
阅读量:6454 次
发布时间:2019-06-23

本文共 3477 字,大约阅读时间需要 11 分钟。

1.添加Maven依赖

org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-websocket
1.3.5.RELEASE
复制代码

2.webSocket配置

/** * webSocket配置 * @author 陈梓平 * @date 2017/10/25. */@Configurationpublic class WebSocketConfig {    /**     * 注入ServerEndpointExporter,     * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint     * @return     */    @Bean    public ServerEndpointExporter serverEndpointExporter() {        return new ServerEndpointExporter();    }}复制代码

3.自定义websocket

/** * 自定义websocket * @author 陈梓平 * @date 2017/10/25. */@ServerEndpoint(value = "/websocket")@Componentpublic class CustomWebSocket {    /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/    private static int onlineCount = 0;    /**concurrent包的线程安全Set,用来存放每个客户端对应的CumWebSocket对象。*/    private static CopyOnWriteArraySet
webSocketSet = new CopyOnWriteArraySet
(); /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/ private Session session; private static final Logger log = LoggerFactory.getLogger(CustomWebSocket.class); /** * 连接建立成功调用的方法 * @param session */ @OnOpen public void onOpen(Session session) { this.session = session; //加入set中 webSocketSet.add(this); //添加在线人数 addOnlineCount(); log.info("新连接接入。当前在线人数为:"+getOnlineCount()); try { sendMessage("假装有内容"); } catch (IOException e) { e.printStackTrace(); } } /** * 连接关闭调用的方法 */ @OnClose public void onClose() { //从set中删除 webSocketSet.remove(this); //在线数减1 subOnlineCount(); log.info("有连接关闭。当前在线人数为:"+getOnlineCount()); } /** * 收到客户端消息后调用 * @param message * @param session */ @OnMessage public void onMessage(String message, Session session) { log.info("客户端发送的消息:"+message); sendAll(message); } /** * 暴露给外部的群发 * @param message * @throws IOException */ public static void sendInfo(String message) throws IOException { sendAll(message); } /** * 群发 * @param message */ private static void sendAll(String message) { Arrays.asList(webSocketSet.toArray()).forEach(item -> { CustomWebSocket customWebSocket = (CustomWebSocket) item; //群发 try { customWebSocket.sendMessage(message); } catch (IOException e) { e.printStackTrace(); } }); } /** * 发生错误时调用 * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { log.info("有异常啦"); error.printStackTrace(); } /** * 减少在线人数 */ private void subOnlineCount() { CustomWebSocket.onlineCount--; } /** * 添加在线人数 */ private void addOnlineCount() { CustomWebSocket.onlineCount++; } /** * 当前在线人数 * @return */ public static synchronized int getOnlineCount() { return onlineCount; } /** * 发送信息 * @param message * @throws IOException */ public void sendMessage(String message) throws IOException { //获取session远程基本连接发送文本消息 this.session.getBasicRemote().sendText(message); //this.session.getAsyncRemote().sendText(message); }}复制代码

4.前端页面

    WebSocketWelcome
复制代码

5.测试




转载地址:http://axfzo.baihongyu.com/

你可能感兴趣的文章
无缝滚动实现原理分析【公告栏】
查看>>
Java Web 高性能开发
查看>>
redis-cli 命令总结
查看>>
CentOS 4.4双网卡绑定,实现负载均衡
查看>>
GitHub页面使用方法
查看>>
Python爬虫综述(笔记)
查看>>
Scala之柯里化和隐式转换
查看>>
Merge and BottomUpSort
查看>>
reids 安装记录
查看>>
获取androdmanifest里面的meta-data
查看>>
mysql拷贝表的几种方式
查看>>
NetApp FAS2240-4存储删除文件数据恢复
查看>>
用设计模式去掉没必要的状态变量 —— 状态模式
查看>>
linux安装elasticsearch及遇到的各种问题
查看>>
健忘的正则
查看>>
[转]CMake快速入门教程:实战
查看>>
IntelliJ IDEA创建JavaWeb工程及配置Tomcat部署
查看>>
Markdown用法
查看>>
求最大值及其下标
查看>>
Request header is too large
查看>>