如何搭建SpringWebSocket以及搭建中一些常到的问题

第一步:

         我们需要配置一下web.xml文件:

           <servlet>
                         <servlet-name>dispatcherServlet</servlet-name>
                         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                         <init-param>
                              <param-name>ContextConfigLocation</param-name>
                              <param-value>classpath:springmvc.xml</param-value>
                        </init-param>
                              <load-on-startup>1</load-on-startup>//web容器启动边加载配置
                       <async-supported>true</async-supported>//异步处理
             </servlet>
             <servlet-mapping>
                      <servlet-name>dispatcherServlet</servlet-name>
                    <url-pattern>/</url-pattern>
            </servlet-mapping>


第二步:

            我们需要配置一下springmvc.xml文件:我先这个我就不多说了,你都学到这里了,相信spring这些也都很熟悉了

               <context:component-scan base-package="com.helei.config"/>
 
                       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                       <property name="prefix" value="/webapp/WEB-INF/page"/>
                         <property name="suffix" value=".jsp"></property>
                      </bean>

                <mvc:annotation-driven/>//是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。
                <mvc:default-servlet-handler/>//就是将我们的静态资源交给servlet容器处理


第三步:

        来写我们的SpringwebSocket的配置类需要实现WebSocketConfigurer这个接口

             

                @Configuration //指明该类为Spring 配置类,相当于beans
               @EnableWebSocket // 声明该类支持WebSocket
               public class springSocketConfig implements WebSocketConfigurer {
                          public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
                                 //在这里我们要注册WebSocket Server 的实现类,这就好比 ServerApplicationConfig,让spring的得到webSocket操作对象
                                //第一个参数是我们要注册的操作对象,第二个参数是我们访问的地址,也就是类似于之前 serverEndpoint("/helei")
                                //接下来一个是增加一个拦截器,可以再我们之前做一些过滤处理
                                         registry.addHandler(webSocketEndpoint(), "/text").
                                         addInterceptors(handShakeIntercepter()).setAllowedOrigins("http://localhost:8080");//这里呢是有权限设定,如果你很困扰,如若遇到权限问题,你就                                            不要setAllowedOrigins,获取你就成功了,倒是后再来加上这句,反复测试,加深理解
  
                                         registry.addHandler(webSocketEndpoint(), "/sockjs/helei").
                                         addInterceptors(handShakeIntercepter()).withSockJS();
                                       }
 
                                         /**
                                           * 得到webSocket操作对象
                                           * @return
                                           */
                                       @Bean
                                        public WebSocketEndpoint webSocketEndpoint()
                                         {
                                                    return new WebSocketEndpoint();
                                         }
 
                                        @Bean
                                          public HandShakeIntercepter handShakeIntercepter()
                                        {
                                                  return new HandShakeIntercepter();
                                        }
 
                      }

第四步:

                如果你想搞个拦截器,哈哈,看这里,我们需要继承一个HttpSessionHandshakeInterceptor这个类

               

                      //这个类当继承 HttpSessionHandshakeInterceptor 就可以再wensocket握手前或者后,做一些相关操作
                               public class HandShakeIntercepter extends HttpSessionHandshakeInterceptor  {
                     //握手之前
                  @Override
                  public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
                       Map<String, Object> attributes) throws Exception {
                // TODO Auto-generated method stub
                 //这个参数是request, response,wsHandler
                   //WebSocketHandler这个接口还实现了很多的操作的抽象子类,该对象提供了客户端连接,关闭,错误,发送等方法,重写这几个方法即可实现自定义业务逻辑
                  //Map<String, Object> attributes  装有webSocketSession设置的属性
                  System.out.println("握手之前");
                 return super.beforeHandshake(request, response, wsHandler, attributes);
  
  
          }
 
                //握手之后
                @Override
                 public void afterHandshake(ServerHttpRequest serverhttprequest, ServerHttpResponse serverhttpresponse,
                   WebSocketHandler websockethandler, Exception exception) {
                   // TODO Auto-generated method stub
                    System.out.println("握手之后");
                    super.afterHandshake(serverhttprequest, serverhttpresponse, websockethandler, exception);
 
                        }
 
           }

第五步:
           接下来这个类就是我们的消息操作,一个c/s之间通过WebSocket进行信息交流那么我们需要继承TextWebSocketHandler这个类
           
//这个类继承TextWebSocketHandler类之后,可以用来处理客户端传来的请求并做相应的处理
public class WebSocketEndpoint extends TextWebSocketHandler {
  //然后重写父类方法handlerTextMessage(),每当客户端发送信息过来,都会由这个函数接收并处理。
 //在这里还可以实现消息发送,点对点发送等功能    WebSocketSession session会话   textmessage传递过来的信息
  @Override
  protected void handleTextMessage(WebSocketSession websocketsession, TextMessage textmessage) throws Exception {
   // TODO Auto-generated method stub
   
   TextMessage returnMessage=new TextMessage(textmessage.getPayload()+"服务器接收到来自客户端的信息");
   System.out.println(returnMessage.toString());
   super.handleTextMessage(websocketsession, textmessage);
  }
  @Override
  public void afterConnectionEstablished(WebSocketSession websocketsession) throws Exception {
   // TODO Auto-generated method stub
   //在这里我们可以创建一个顺序集合来装纳我们的session 会话
   System.out.println("开启WebSocket"+websocketsession.getRemoteAddress().toString());
   super.afterConnectionEstablished(websocketsession);
  }
  
  @Override
  public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
   // TODO Auto-generated method stub
   System.out.println("连接关闭"+session.getRemoteAddress().toString());
   super.afterConnectionClosed(session, status);
  }
  
  @Override
  public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
   // TODO Auto-generated method stub
   System.out.println(message.getPayload());
   TextMessage msg=new TextMessage(message.getPayload()+"服务器收到信息");
   session.sendMessage(msg);
   super.handleMessage(session, message);
  }
  
  @Override
  public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
   // TODO Auto-generated method stub
   if(session.isOpen())
   {
    session.close();
   }
   System.out.println(exception.toString());
   System.out.println("webSocket连接异常");
   super.handleTransportError(session, exception);
  }
  
  @Override
  public boolean supportsPartialMessages() {
   // TODO Auto-generated method stub
   return false;
  }
 
}
这个有带你多哈,其实你也不用重写太多,就handleMessage那个就可以了,我相信,你看得懂

第六步:
           
           哎,写的好辛苦,终于到了界面了:这个我就截图了,注意点看,我怕打字,我会累瘫了,嘻嘻
      
           

由于截图,感想有些地方截图截取重复了,多担待点哈。有什么地方需要指正的欢迎多多留言,让我也一起学习。

接下来就是运行的结果图:

       


以下是使用Spring Boot搭建WebSocket的简单示例: 1. 添加依赖 在pom.xml添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 配置WebSocketSpring Boot的配置文件application.properties添加以下配置: ``` server.port=8080 ``` 3. 编写WebSocket处理器 创建一个WebSocket处理器类,用于处理WebSocket连接和消息。 ```java @Component public class WebSocketHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); session.sendMessage(new TextMessage("Received: " + payload)); } } ``` 4. 配置WebSocket处理器 创建一个WebSocket配置类,用于配置WebSocket处理器。 ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Autowired private WebSocketHandler webSocketHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(webSocketHandler, "/ws").setAllowedOrigins("*"); } } ``` 5. 测试WebSocket 在浏览器打开http://localhost:8080/index.html,并打开浏览器的开发者工具,在控制台输入以下JavaScript代码,连接WebSocket并发送消息: ```javascript var ws = new WebSocket("ws://localhost:8080/ws"); ws.onmessage = function(event) { console.log(event.data); } ws.send("Hello, WebSocket!"); ``` 在控制台应该可以看到收到的消息,例如: ``` Received: Hello, WebSocket! ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值