实现java-websocket
新建配置项
@Configuration
public class myWebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
创建websocket类
/**
* @Author: shenjunfeng
* @Date: 2020/12/9 17:21
*/
@ServerEndpoint(value = "/testWebSocket/{projectId}")
@Component
public class testWebSocketController extends BaseController {
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySet<testWebSocketController> webSocketSet = new CopyOnWriteArraySet<>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(@PathParam("projectId") String projectId, Session session) {
this.session = session;
webSocketSet.add(this);
System.out.println("连接成功");
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
webSocketSet.remove(this);
System.out.println("有一连接关闭");
}
/**
* 收到客户端消息后调用的方法
*
* @param message 客户端发送过来的消息
*/
@OnMessage
public void onMessage(@PathParam("projectId") String projectId, String message) throws IOException, InterruptedException {
if (StringUtils.isNotNull(this.session)){
Object object = SpringContextUtil.getBean("testWebSocketService");
TestWebSocketServiceImpl testWebSocketService= (TestWebSocketServiceImpl )object;
this.session.getBasicRemote().sendText(com.alibaba.fastjson.JSON.toJSONString(testWebSocketService.list()));
}
System.out.println("来自客户端的消息:" + message);
}
/**
* 发生错误时调用
*/
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误");
webSocketSet.remove(this);
error.printStackTrace();
}
}
使用注解ServerEndpoint后,无法使用@autowire ,只能用SpringContextUtil.getBean去获取spring中的bean实例,如果获取不到,就在想要获取的bean上面,加上名字即可。