1.实例化对象
@Configuration
@EnableWebSocket
// 开启websocket
public class SystemWebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(echoWebSocketHandler(), "/notice.ws").addInterceptors(new WebSocketHandshakeInterceptor()); // 提供符合W3C标准的Websocket数据
registry.addHandler(echoWebSocketHandler(), "/sockjs/notice.ws")
.addInterceptors(new WebSocketHandshakeInterceptor()).withSockJS();// 提供符合SockJS的数据
}
@Bean
public WebSocketHandler echoWebSocketHandler() {
return new SystemWebSocketHandler();
}
@Bean
public WebSocketHandler snakeWebSocketHandler() {
return new SystemWebSocketHandler();
}
// Allow serving HTML files through the default Servlet
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* {@inheritDoc}
* <p>
* This implementation is empty.<pre name="code" class="java">public class SystemWebSocketHandler extends TextWebSocketHandler {
/**
* 日志记录器
*/
private static final Logger LOGGER = LoggerFactory.getLogger(SystemWebSocketHandler.class);
// 连接创建生效以后执行的方法
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
LOGGER.info("Socket 连上了");
String gwID = (String) session.getAttributes().get("gwID");
String amID = (String) session.getAttributes().get("amID");
if (!StringUtils.isEmpty(gwID) || !StringUtils.isEmpty(amID)) {
if (null != gwID) {
if (session.isOpen()) {
SocketMessageUtil.addNewConnector(gwID, session);
}
}
if (null != amID) {
if (session.isOpen()) {
SocketMessageUtil.addNewConnector(amID, session);
}
}
}
}
// 接收客户端发送过来的消息
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
LOGGER.info("Socket 接收客户端发送过来的消息");
String msgContent = message.getPayload().toString();
String gwID = (String) session.getAttributes().get("gwID");
if (!StringUtils.isEmpty(msgContent) && "1".equals(msgContent)) {
TextMessage message1 = new TextMessage("1");
SocketMessageUtil.sendMessageToUser(gwID, message1);
} else {
for (int i = 0; i < 10; i++) {
TextMessage message1 = new TextMessage("2");
SocketMessageUtil.sendMessageToUser(gwID, message1);
}
}
}
// 传输错误时触发
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
exception.printStackTrace();
}
// 连接关闭时触发
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
LOGGER.info("Socket 连接关闭");
String gwID = (String) session.getAttributes().get("gwID");
String amID = (String) session.getAttributes().get("amID");
if (!StringUtils.isEmpty(gwID) || !StringUtils.isEmpty(amID)) {
if (null != gwID) {
SocketMessageUtil.deleteConnector(gwID);
}
if (null != amID) {
SocketMessageUtil.deleteConnector(amID);
}
} else {
SocketMessageUtil.deleteConnector(session);
}
}
/**
* 是否支持分步消息
*/
@Override
public boolean supportsPartialMessages() {
return false;
}
}
*/ @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { // -1 为用不失效 configurer.setDefaultTimeout(-1); }}
/notice.ws是websocket的访问地址
2.定义通信处理类