基于spring搭建websocket服务端

基于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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值