基于spring搭建websocket服务端
因为有过搭建spring框架的基础,所以搭建spring框架部分跳过。
1.环境
IDE:IDEA2019
jdk:8
tomcat9.0
maven 3.7
2.添加依赖
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>${org.springframework.version}</version>
</dependency>
3.自定义websocket消息处理类
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
// ...
System.out.println("握手信息:"+message);
}
/**
* 建立连接后触发的回调
*/
public void afterConnectionEstablished(WebSocketSession session) throws Exception{
System.out.println("已经建立websocket连接了....");
}
/**
* 收到消息时触发的回调
*/
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception{
System.out.println("从前端收到消息:");
}
/**
* 传输消息出错时触发的回调
*/
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception{
System.out.println("websocket连接出错...");
System.out.println(exception.getStackTrace());
}
/**
* 断开连接后触发的回调
*/
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception{
System.out.println("websocket连接断开....");
}
/**
* 是否处理分片消息
*/
public boolean supportsPartialMessages(){
return true;
}
}
4.websocket消息拦截器类
public class WebSocketInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
//这里面可以按自己需求编码
return true;
}
@Override
public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
}
}
5.websocket配置类
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myHandler(), "/chat").addInterceptors(new WebSocketInterceptor()) // “/chat”该路径自定义
.setAllowedOrigins("http://localhost");
}
@Bean
public WebSocketHandler myHandler() {
return new MyWebSocketHandler();
}
}
6.spring配置文件添加配置
<!-- 声明不要忘添加 -->
xmlns:websocket="http://www.springframework.org/schema/websocket"
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket.xsd
<!-- websocket 处理器 -->
<bean id="websocketHandler" class="com.chzu.websocket.MyWebSocketHandler"/>
<!-- websocket 拦截器 /chat路径与之前保持一致,我在这里被坑了 -->
<websocket:handlers>
<websocket:mapping path="/chat" handler="websocketHandler"/>
<websocket:handshake-interceptors>
<bean class="com.chzu.websocket.WebSocketInterceptor"/>
</websocket:handshake-interceptors>
</websocket:handlers>
7.前端js
var socket = new WebSocket("ws://localhost:8080/chat");
注意浏览器是否支持websocket
至此搭建结束。
项目预览地址(可能会在2021年6月底失效,阿里云服务器付不起,哈哈哈):http://47.106.234.154:8081/