WebSocket与Tomcat8.0以下
使用
tomcat自带catalina.jar与tomcat-coyote.jar
方法
通过继承catalina.jar中的WebSocketServlet类作为serverlet拦截前台ws协议的请求,大致关键代码:
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等方法与前台相应方法匹配。
注意:
-
Tomcat7.0.38之前版本会出现长链接自动断开,之后的版本修复了这个问题。
-
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
-