WebSocket与Tomcat8.0以下

使用

tomcat自带catalina.jar与tomcat-coyote.jar

方法

通过继承catalina.jar中的WebSocketServlet类作为serverlet拦截前台ws协议的请求,大致关键代码:

1
2
3
createWebSocketInbound(String arg0){
return new myMessageInbound(users);

myMessageInbound是继承MessageInbound的类,里面自带方法onTextMessage、onMessage、onOpen等,即与前台相应方法匹配。

WebSocket与8.0以上

使用

tomcat自带的websocket-api.jar

方法

通过@ServerEndpoint(value = “/xxx”)注解,此时,前台ws协议访问只需是ip+port/xxx,而不需要项目名。该类中,使用websocket-api.jar中的onclose、onopen等方法与前台相应方法匹配。

注意:

  1. Tomcat7.0.38之前版本会出现长链接自动断开,之后的版本修复了这个问题。

  2. tomcat的lib中含有websocket-api.jar,如果你项目是引用的自己的websocket-api.jar,部署到tomcat上后,会导致两个jar冲突(前台一直显示websocket close)。有三种解决方案:

    • 修改tomcat的contxet.xml文件,添加

    • 直接调用tomcat的lib中的websocket-api.jar。

    • 【推荐】引入Tomcat类库:Add Library->Server Runtime->Apache Tomcat