新入坑的小伙伴可以往这里看
一开始用的@ServerEndPoint()注解,使用springboot自带tomcat在本地环境测试没有任何问题,但放在生产环境用8.0/8.5版本均有端口重复注册冲突导致tomcat关闭的问题。百度国内暂未找到解决方案,stack overflow有人提出因为测试环境和生产环境差异 应该加上对当前环境判断。未使用此方法,有兴趣的小伙伴可以自行研究。
我是另外选取了继承TextWebSocketHandler的方式实现websocket,此方法和注解有所不同,需要override类里的方法实现socket操作。配置文件:
import javax.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import cn.web.ms.xcx.api.mapper.socket.ChatMsgMapper;
import cn.web.ms.xcx.api.web.socket.XcxChatServerEndpoint;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{
@Resource
private ChatMsgMapper chatMsgMapper;
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new XcxChatServerEndpoint(chatMsgMapper), "/websck/xcxChat").addInterceptors(new HandshakeInterceptor()).setAllowedOrigins("*");
}
}
相信大家看出来了 我添加了类的构造方法 在注册websocket的时候就带入maper,间接实现了注入bean的动作 希望能对大家有帮助 另希望大家可以多看看springboot官网,上面也有很多解决方法,论坛也很活跃,对希望提升的小伙伴应该有很大帮助:
便捷入口:springboot - blog