package com.ws.websocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.AbstractWebSocketHandler;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class MyWebsocketHandler extends AbstractWebSocketHandler {
private final Logger logger = LoggerFactory.getLogger(getClass());
private static final Map<String, WebSocketBean> webSocketBeanMap;
private static final AtomicInteger clientIdMaker; //仅用用于标识客户端编号
static {
webSocketBeanMap = new ConcurrentHashMap<>();
clientIdMaker = new AtomicInteger(0);
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
//当WebSocket连接正式建立后,将该Session加入到Map中进行管理
WebSocketBean webSocketBean = new WebSocketBean();
webSocketBean.setWebSocketSession(session);
webSocketBean.setClientId(clientIdMaker.getAndIncrement());
webSocketBeanMap.put(session.getId(), webSocketBean);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
//当连接关闭后,从Map中移除session实例
webSocketBeanMap.remove(session.getId());
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
//传输过程中出现了错误
if (session.isOpen()){
session.close();
}
webSocketBeanMap.remove(session.getId());
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
//处理接收到的消息
logger.info("Received message from client[ID:" + webSocketBeanMap.get(session.getId()).getClientId() +
"]; Content is [" + message.getPayload() + "].");
TextMessage textMessage = new TextMessage("Server has received your message.");
session.sendMessage(textMessage);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
环境配置 开发环境配置为: JDK 8 IntelliJ IDEA 2020.1.2 x64 Springboot集成的Websocket 使用Springboot集成的websocket需要使用到以下几个类/接口: WebSocketHandler:WebSocket消息以及生命周期事件的处理器。 WebSocketConfigurer:对WebSocket进行配置,包括配置拦截器、配置接口地址。 HttpSessionHandshakeInterceptor:拦截器,可以对Websocket通信过程中的请求进行拦截处理。 除了上述三个官方提供的类/接口之外,我们还需要实现一个WebSocket的包装类,用于为每一个WebSocket实例添加额外的信息,比如客户端的ID。在Spring内,WebSocket实例以WebSocketSession形式存在,每个session都代表了一个服务端与客户端的会话。
资源推荐
资源详情
资源评论
收起资源包目录
websocket.zip (41个子文件)
websocket_server
HELP.md 860B
mvnw.cmd 7KB
pom.xml 2KB
src
test
java
com
ws
WebsocketServerApplicationTests.java 216B
main
resources
templates
static
application.yml 21B
java
com
ws
WebsocketServerApplication.java 417B
websocket
MyWebSocketInterceptor.java 2KB
WebSocketBean.java 584B
MyWebsocketHandler.java 2KB
WebSocketConfiguration.java 1KB
.mvn
wrapper
maven-wrapper.properties 233B
maven-wrapper.jar 61KB
target
classes
application.yml 21B
com
ws
WebsocketServerApplication.class 812B
websocket
MyWebSocketInterceptor.class 3KB
WebSocketBean.class 929B
MyWebsocketHandler.class 3KB
WebSocketConfiguration.class 2KB
test-classes
com
ws
WebsocketServerApplicationTests.class 544B
generated-test-sources
test-annotations
generated-sources
annotations
websocket_server.iml 9KB
mvnw 11KB
.gitignore 395B
websocket_client
HELP.md 860B
mvnw.cmd 7KB
pom.xml 2KB
src
test
java
com
ws
WebsocketClientApplicationTests.java 216B
main
resources
templates
static
application.yml 20B
java
com
ws
websocket
MyWebSocketClient.java 1KB
Main.java 1KB
WebsocketClientApplication.java 329B
.mvn
wrapper
maven-wrapper.properties 233B
maven-wrapper.jar 61KB
target
classes
application.yml 20B
com
ws
WebsocketClientApplication.class 746B
websocket
Main.class 2KB
Main$MyTimerTask.class 1KB
MyWebSocketClient.class 2KB
test-classes
com
ws
WebsocketClientApplicationTests.class 544B
generated-test-sources
test-annotations
generated-sources
annotations
websocket_client.iml 9KB
mvnw 11KB
.gitignore 395B
共 41 条
- 1
资源评论
小蜜蜂vs码农
- 粉丝: 1062
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的异常姿势识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功