- 启动websocket支持
WebSocketConfig
package com.websocket.demo2.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter() ;}
}
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意,@Configuration注解的配置类有如下要求:
@Configuration不可以是final类型;
@Configuration不可以是匿名类;
嵌套的configuration必须是静态类。
@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的bean类,作用为:注册bean对象
- 进行websocket的基本连接
WebsocketServer
websocket成功建立连接后,调用onopen方法;断开连接时调用onclose方法,当发生错误时调用onerror方法。
package com.websocket.demo2.config;
import org.springframework.stereotype.Component;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/hello/{userId}")
@Component
public class WebsocketServer {
public WebsocketServer(){
System.out.println("WebsocketTest");
}
@OnOpen
public void onopen(Session session, @PathParam("userId")String userId){
System.out.println("连接成功");
session.getAsyncRemote().sendText("Hello client"+userId);
}
@OnClose
public void onclose(Session session){
System.out.println("成功关闭");
}
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误");
error.printStackTrace();
}
@ServerEndpoint注解用于配置一个编程式的端点
@Component (把普通pojo实例化到spring容器中,相当于配置文件中的)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@OnOpen定义一个事件处理程序,当WebSocket 的连接状态readyState 变为1时调用;这意味着当前连接已经准备好发送和接受数据。这个事件处理程序通过 事件(建立连接时)触发。
@OnClose返回一个事件监听器,这个事件监听器将在 WebSocket 连接的readyState 变为 CLOSED时被调用
@OnError下可以定义一个发生错误时执行的回调函数
- 测试是否连接上