qq_38773852 2019-07-29 11:43 采纳率: 50%
浏览 459
已结题

SSM项目中引入websocket后,websocket有时能够正常运行,有时候无法正常启动

SSM项目中引入websocket后,websocket有时能够正常运行,有时候无法正常启动,配置是相同的,并没有更改。
IDE:IDEA
jdk:1.8
tomcat:8.5

public class WebSocketFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.startWebsocketInstantMsg();
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }

    public void startWebsocketInstantMsg(){
        WebSocketImpl.DEBUG=false;
        WebServer webServer = new WebServer(6004);
        webServer.onStart();
    }
}

webserver.class类

public class WebServer extends WebSocketServer {

    public WebServer(int port) {
        super(new InetSocketAddress(port));
    }

    public WebServer(InetSocketAddress address) {
        super(address);
    }

    @Override
    public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {
        System.out.println("onOpen");
    }

    @Override
    public void onClose(WebSocket webSocket, int i, String s, boolean b) {
        //断开连接时候触发代码
        userLeave(webSocket);
        System.out.println(s);
        System.out.println("onClose");
    }

    @Override
    public void onMessage(WebSocket webSocket, String s) {
        System.out.println(s);
        System.out.println("onMessage");
        if(null != s){
            String userName = s.replaceFirst("online", s);//用户名
            userJoin(webSocket,userName);//用户加入
        }
        WsPool.sendMessageToUser(webSocket,"你好,客户端");
    }

    @Override
    public void onError(WebSocket webSocket, Exception e) {
        //错误时候触发的代码
        System.out.println("on error");
        e.printStackTrace();
    }

    @Override
    public void onStart() {
        System.out.println("onStart");
        new Thread( this ).start();
    }

    /**
     * 去除掉失效的websocket链接
     * @param conn
     */
    private void userLeave(WebSocket conn){
        WsPool.removeUser(conn);
    }
    /**
     * 将websocket加入用户池
     * @param conn
     * @param userName
     */
    private void userJoin(WebSocket conn,String userName){
        WsPool.addUser(userName, conn);
    }
}

maven配置

<dependency>
      <groupId>javax.websocket</groupId>
      <artifactId>javax.websocket-api</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.java-websocket</groupId>
      <artifactId>Java-WebSocket</artifactId>
      <version>1.3.7</version>
    </dependency>

web.xml 配置

<filter>
        <filter-name>webSocketFilter</filter-name>
        <filter-class>com.platform.interceptor.WebSocketFilter</filter-class>
    </filter>
  • 写回答

1条回答 默认 最新

  • 真-酸辣土豆丝 2019-07-29 14:35
    关注

    无法启动具体什么情况,错误信息有吗

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大