SpringWebSocket, Tomcat WebSocket, Jetty WebSocket, Java-WebSocket.jar 的区别

本文解析了Tomcat和Jetty容器对WebSocket的支持原理,并对比了Java-WebSocket.jar和Spring-WebSocket的不同应用场景,以及如何在Spring项目中有效利用WebSocket。
       Tomcat和Jetty本身作为J2EE的容器而存在,所以Tomcat以及Jetty中对于Websocket协议的支持,都是基于Java自身所定义的接口进行的支持,各容器对WebSocket的具体实现方式不同,但常用的WebSocket接口,如@ServerPoint(定义一个WebSocket接口)等这样的应用层规范,由于是Java自身已经定义的接口规范,所以在无需了解具体的容器实现时,只需要关注Java自身对于WebSocket的实现即可;(当然在具体使用时,需要确认当前容器的版本是否支持WebSocket以及是否引入的有对应WebSocket jar等,毕竟容器才是对外socket协议的具体实现交互类,由于Tomcat以及Jetty本身的lib下是存在对应的WebSocket具体的实现jar的,所以项目中进行引用的时候,需要设置为非runtime运行时使用的jar,或者直接将对应的容器lib直接引入到项目的librares中即可)
**Java-WebSocket.jar具体是做什么?**
因为Java-WebSocket.jar是github上关于java websocket的项目start数量最多的一个项目,所以,初次使用或者不熟悉Java WebSocket的同学,一般都会直接按照Java-WebSocket的实例Demo进行socket协议的效果验证,结果在具体的J2EE web开发中,却会发现一些莫名的问题,比如:虽然我引用了Java-WebSocket.jar但最终服务跑起来后,感觉和他并没有神马关系;反而会出现很多Tomcat容器不兼容等的容器异常;那么此时则必须了解下,对应的Java-WebSocket是做什么滴了,Java-WebSocket是github上一个开源大神写的关于Java实现WebSocket的一个开源组件,使用它可以做到Java中使用WebSocket协议,但是!具体的J2EE项目中,Tomcat中所实现的WebSocket协议的具体实现,则跟当前的Java-WebSocket.jar没有一毛钱关系,换句话说,如果你肯定是基于容器去启动服务的情况下,那么要Java-webSocket.jar于不要这个Jar问题不大,因为Tomcat容器已经帮你实现了一套WebSocket的具体实现了,但是!如果你的服务

不是基于jetty,Tomcat等容器去启动的话,那么你还想实现WebSocket效果,此时的Java-WebSocket.jar则是最佳的选择,因为它可以帮你实现Main函数启动时定义WebSocket端口等一系列事情(具体可参考github地址:https://github.com/TooTallNate/Java-WebSocket)注意:Java-WebSocket.jar对socket协议的具体实现,当然也是基于Java自身的WebSocket API规范来实现的了;
Spring-WebSocket是做什么?
既然容器已经帮我们实现了关于WebSocket协议的具体实现,那么为什么我还要引入Spring-WebSocket?我要它做什么?yes,是的,如果你只是单纯的使用Tomcat所实现的WebSocket时,直接使用@ServerPoint定义WebSocket接口,然后直接使用,当然是没有问题的撒,但是!如果你的项目是基于Spring做的开发,比如你引入了SpringMVC,还引入了SpringSecurity,那么问你个问题,既然Spring已经帮你管理了Controller控制层的访问(基于请求拦截),也帮你做了SpringSecurity安全请求认证,那么,为什么你定义一个WebSocket接口,Spring就会直接帮你映射到这个WebSocket的控制器上吗?答案是:当然不会,因为SpringMVC默认是做基于Http的拦截的,如果你想使用WebSocket协议,那么你只需要引入Spring-WebSocket的jar包集就行,它会帮你查找被@ServerPoint所定义的socket接口类,然后将该类定义为Socket的实现类,当然具体的Socket协议的规范实现,还是容器帮你进行实现;除此之外,既然Socket接口也是归属于Spring管理的,那么针对Socket协议,Spring-Socket也帮你实现了一整套的安全规范,可以设置拦截,是否允许非指定的域名访问,等一系列效果;(建议深度使用Spring的项目可以引入Spring-Socket做一整套的控制,因为Spring Socket的确帮你实现了很多一整套的安全认证的功能,容器只是基于WebSocket的具体实现罢了,所以,各自分工不同,各个角色所做的事情,使用socket时,此处需要牢记,只有明白了各个角色所做的解耦合的事情后,出现异常问题,才更加方便和有思绪的进行排查;注:LZ所实现的WebSocket也是基于Spring socket的实现,网上也有一些基于Spring的项目,使用非spring-socket的实现,感兴趣的小伙伴可以试一下,Spring本身应该也是支持开启具体参数后,然后支持socket协议的控制层的直接传输,具体没有做过验证实现;不想重新搞的小伙伴直接按照上述的思路和角色开发,肯定是没毛病的; 祝各位宝宝春梦了无痕;

[root@yfw lib]# cd /opt/openfire/lib [root@yfw lib]# sudo rm -f jsr311-api-1.1.1.jar jersey-core-1.19.4.jar [root@yfw lib]# ls -la total 62992 drwxr-xr-x 2 openfire openfire 12288 Nov 15 19:32 . drwxr-xr-x 11 openfire openfire 4096 Nov 15 18:34 .. -rwxr-xr-x 1 openfire openfire 62983 Feb 1 1980 activation-1.1.jar -rwxr-xr-x 1 openfire openfire 259853 Feb 1 1980 apache-el-9.0.107.jar -rwxr-xr-x 1 openfire openfire 1052263 Feb 1 1980 apache-jsp-9.0.107.jar -rwxr-xr-x 1 openfire openfire 126113 Feb 1 1980 asm-9.8.jar -rwxr-xr-x 1 openfire openfire 73498 Feb 1 1980 asm-commons-9.8.jar -rwxr-xr-x 1 openfire openfire 51934 Feb 1 1980 asm-tree-9.8.jar -rwxr-xr-x 1 openfire openfire 476853 Feb 1 1980 bcpg-jdk18on-1.78.1.jar -rwxr-xr-x 1 openfire openfire 1125173 Feb 1 1980 bcpkix-jdk18on-1.78.1.jar -rwxr-xr-x 1 openfire openfire 8324412 Feb 1 1980 bcprov-jdk18on-1.78.1.jar -rwxr-xr-x 1 openfire openfire 705135 Feb 1 1980 bcutil-jdk18on-1.78.1.jar -rwxr-xr-x 1 openfire openfire 906581 Feb 1 1980 caffeine-3.2.0.jar -rwxr-xr-x 1 openfire openfire 223979 Feb 1 1980 checker-qual-3.33.0.jar -rwxr-xr-x 1 openfire openfire 85550 Feb 1 1980 common-image-3.9.4.jar -rwxr-xr-x 1 openfire openfire 89993 Feb 1 1980 common-io-3.9.4.jar -rwxr-xr-x 1 openfire openfire 119561 Feb 1 1980 common-lang-3.9.4.jar -rwxr-xr-x 1 openfire openfire 353793 Feb 1 1980 commons-codec-1.15.jar -rwxr-xr-x 1 openfire openfire 211301 Feb 1 1980 commons-dbcp2-2.9.0.jar -rwxr-xr-x 1 openfire openfire 45711 Feb 1 1980 commons-ip-math-1.32.jar -rwxr-xr-x 1 openfire openfire 702952 Feb 1 1980 commons-lang3-3.18.0.jar -rwxr-xr-x 1 openfire openfire 61829 Feb 1 1980 commons-logging-1.2.jar -rwxr-xr-x 1 openfire openfire 134858 Feb 1 1980 commons-pool2-2.9.0.jar -rwxr-xr-x 1 openfire openfire 238400 Feb 1 1980 commons-text-1.10.0.jar -rwxr-xr-x 1 openfire openfire 324655 Feb 1 1980 dom4j-2.1.4.jar -rwxr-xr-x 1 openfire openfire 885532 Feb 1 1980 dwr-3.0.2-RELEASE.jar -rwxr-xr-x 1 openfire openfire 3160927 Feb 1 1980 ecj-3.33.0.jar -rwxr-xr-x 1 openfire openfire 16017 Feb 1 1980 error_prone_annotations-2.18.0.jar -rwxr-xr-x 1 openfire openfire 4617 Feb 1 1980 failureaccess-1.0.1.jar -rwxr-xr-x 1 openfire openfire 3037368 Feb 1 1980 guava-32.0.1-jre.jar -rwxr-xr-x 1 openfire openfire 1642044 Feb 1 1980 hsqldb-2.7.1.jar -rwxr-xr-x 1 openfire openfire 780321 Feb 1 1980 httpclient-4.5.13.jar -rwxr-xr-x 1 openfire openfire 328593 Feb 1 1980 httpcore-4.4.13.jar -rwxr-xr-x 1 openfire openfire 1140532 Feb 1 1980 i18n-5.0.2.jar -rwxr-xr-x 1 openfire openfire 69514 Feb 1 1980 imageio-bmp-3.9.4.jar -rwxr-xr-x 1 openfire openfire 116474 Feb 1 1980 imageio-core-3.9.4.jar -rwxr-xr-x 1 openfire openfire 29877 Feb 1 1980 istack-commons-runtime-3.0.11.jar -rwxr-xr-x 1 openfire openfire 9301 Feb 1 1980 j2objc-annotations-2.8.jar -rwxr-xr-x 1 openfire openfire 68453 Feb 1 1980 jakarta.activation-1.2.2.jar -rwxr-xr-x 1 openfire openfire 25058 Feb 1 1980 jakarta.annotation-api-1.3.5.jar -rwxr-xr-x 1 openfire openfire 15392 Feb 1 1980 jakarta.transaction-api-1.3.3.jar -rwxr-xr-x 1 openfire openfire 115638 Feb 1 1980 jakarta.xml.bind-api-2.3.3.jar -rwxr-xr-x 1 openfire openfire 287352 Feb 1 1980 jansi-1.18.jar -rwxr-xr-x 1 openfire openfire 56674 Feb 1 1980 javax.activation-api-1.2.0.jar -rwxr-xr-x 1 openfire openfire 659031 Feb 1 1980 javax.mail-1.6.2.jar -rwxr-xr-x 1 openfire openfire 128076 Feb 1 1980 jaxb-api-2.3.1.jar -rwxr-xr-x 1 openfire openfire 1035660 Feb 1 1980 jaxb-runtime-2.3.3.jar -rwxr-xr-x 1 openfire openfire 232455 Feb 1 1980 jaxen-1.2.0.jar -rwxr-xr-x 1 openfire openfire 2254 Feb 1 1980 jcip-annotations-1.0.jar -rwxr-xr-x 1 openfire openfire 18420 Feb 1 1980 jcl-over-slf4j-2.0.9.jar -rwxr-xr-x 1 openfire openfire 4573 Feb 1 1980 jetty-ee-12.0.24.jar -rwxr-xr-x 1 openfire openfire 81096 Feb 1 1980 jetty-ee8-annotations-12.0.24.jar -rwxr-xr-x 1 openfire openfire 11806 Feb 1 1980 jetty-ee8-apache-jsp-12.0.24.jar -rwxr-xr-x 1 openfire openfire 444737 Feb 1 1980 jetty-ee8-nested-12.0.24.jar -rwxr-xr-x 1 openfire openfire 22988 Feb 1 1980 jetty-ee8-plus-12.0.24.jar -rwxr-xr-x 1 openfire openfire 76151 Feb 1 1980 jetty-ee8-security-12.0.24.jar -rwxr-xr-x 1 openfire openfire 145652 Feb 1 1980 jetty-ee8-servlet-12.0.24.jar -rwxr-xr-x 1 openfire openfire 132415 Feb 1 1980 jetty-ee8-webapp-12.0.24.jar -rwxr-xr-x 1 openfire openfire 32318 Feb 1 1980 jetty-ee8-websocket-jetty-api-12.0.24.jar -rwxr-xr-x 1 openfire openfire 34475 Feb 1 1980 jetty-ee8-websocket-jetty-common-12.0.24.jar -rwxr-xr-x 1 openfire openfire 33158 Feb 1 1980 jetty-ee8-websocket-jetty-server-12.0.24.jar -rwxr-xr-x 1 openfire openfire 8780 Feb 1 1980 jetty-ee8-websocket-servlet-12.0.24.jar -rwxr-xr-x 1 openfire openfire 436582 Feb 1 1980 jetty-http-12.0.24.jar -rwxr-xr-x 1 openfire openfire 334337 Feb 1 1980 jetty-io-12.0.24.jar -rwxr-xr-x 1 openfire openfire 32912 Feb 1 1980 jetty-jmx-12.0.24.jar -rwxr-xr-x 1 openfire openfire 31093 Feb 1 1980 jetty-jndi-12.0.24.jar -rwxr-xr-x 1 openfire openfire 34802 Feb 1 1980 jetty-plus-12.0.24.jar -rwxr-xr-x 1 openfire openfire 145052 Feb 1 1980 jetty-security-12.0.24.jar -rwxr-xr-x 1 openfire openfire 636164 Feb 1 1980 jetty-server-12.0.24.jar -rwxr-xr-x 1 openfire openfire 273076 Feb 1 1980 jetty-servlet-api-4.0.6.jar -rwxr-xr-x 1 openfire openfire 117316 Feb 1 1980 jetty-session-12.0.24.jar -rwxr-xr-x 1 openfire openfire 696154 Feb 1 1980 jetty-util-12.0.24.jar -rwxr-xr-x 1 openfire openfire 191775 Feb 1 1980 jetty-websocket-core-common-12.0.24.jar -rwxr-xr-x 1 openfire openfire 46361 Feb 1 1980 jetty-websocket-core-server-12.0.24.jar -rwxr-xr-x 1 openfire openfire 87171 Feb 1 1980 jetty-xml-12.0.24.jar -rwxr-xr-x 1 openfire openfire 82863 Feb 1 1980 jmdns-1.0.jar -rwxr-xr-x 1 openfire openfire 397874 Feb 1 1980 jsmpp-2.3.10.jar -rwxr-xr-x 1 openfire openfire 74702 Feb 1 1980 json-20231013.jar -rwxr-xr-x 1 openfire openfire 3819 Feb 1 1980 jspecify-1.0.0.jar -rwxr-xr-x 1 openfire openfire 19936 Feb 1 1980 jsr305-3.0.2.jar -rwxr-xr-x 1 openfire openfire 317816 Feb 1 1980 jtds-1.3.1.jar -rwxr-xr-x 1 openfire openfire 71976 Feb 1 1980 jzlib-1.1.3.jar -rwxr-xr-x 1 openfire openfire 114655 Feb 1 1980 libidn-1.35.jar -rwxr-xr-x 1 openfire openfire 2199 Feb 1 1980 listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar -rwxr-xr-x 1 openfire openfire 1648 Feb 1 1980 log4j2.xml -rwxr-xr-x 1 openfire openfire 313296 Feb 1 1980 log4j-api-2.20.0.jar -rwxr-xr-x 1 openfire openfire 1847550 Feb 1 1980 log4j-core-2.20.0.jar -rwxr-xr-x 1 openfire openfire 26430 Feb 1 1980 log4j-slf4j2-impl-2.20.0.jar -rwxr-xr-x 1 openfire openfire 1358692 Feb 1 1980 mssql-jdbc-9.4.1.jre11.jar -rwxr-xr-x 1 openfire openfire 2489850 Feb 1 1980 mysql-connector-j-8.2.0.jar -rwxr-xr-x 1 openfire openfire 4554 Feb 1 1980 netty-all-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 339045 Feb 1 1980 netty-buffer-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 355199 Feb 1 1980 netty-codec-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 67192 Feb 1 1980 netty-codec-dns-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 37789 Feb 1 1980 netty-codec-haproxy-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 490985 Feb 1 1980 netty-codec-http2-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 674362 Feb 1 1980 netty-codec-http-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 44736 Feb 1 1980 netty-codec-memcache-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 113699 Feb 1 1980 netty-codec-mqtt-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 46015 Feb 1 1980 netty-codec-redis-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 21344 Feb 1 1980 netty-codec-smtp-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 121032 Feb 1 1980 netty-codec-socks-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 34636 Feb 1 1980 netty-codec-stomp-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 19823 Feb 1 1980 netty-codec-xml-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 719225 Feb 1 1980 netty-common-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 580162 Feb 1 1980 netty-handler-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 25650 Feb 1 1980 netty-handler-proxy-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 26833 Feb 1 1980 netty-handler-ssl-ocsp-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 37842 Feb 1 1980 netty-resolver-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 188360 Feb 1 1980 netty-resolver-dns-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 9145 Feb 1 1980 netty-resolver-dns-classes-macos-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 19825 Feb 1 1980 netty-resolver-dns-native-macos-4.1.118.Final-osx-aarch_64.jar -rwxr-xr-x 1 openfire openfire 19629 Feb 1 1980 netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar -rwxr-xr-x 1 openfire openfire 521428 Feb 1 1980 netty-transport-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 147621 Feb 1 1980 netty-transport-classes-epoll-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 108558 Feb 1 1980 netty-transport-classes-kqueue-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 42321 Feb 1 1980 netty-transport-native-epoll-4.1.118.Final-linux-aarch_64.jar -rwxr-xr-x 1 openfire openfire 36594 Feb 1 1980 netty-transport-native-epoll-4.1.118.Final-linux-riscv64.jar -rwxr-xr-x 1 openfire openfire 40644 Feb 1 1980 netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar -rwxr-xr-x 1 openfire openfire 25741 Feb 1 1980 netty-transport-native-kqueue-4.1.118.Final-osx-aarch_64.jar -rwxr-xr-x 1 openfire openfire 25170 Feb 1 1980 netty-transport-native-kqueue-4.1.118.Final-osx-x86_64.jar -rwxr-xr-x 1 openfire openfire 44157 Feb 1 1980 netty-transport-native-unix-common-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 18241 Feb 1 1980 netty-transport-rxtx-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 50814 Feb 1 1980 netty-transport-sctp-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 32189 Feb 1 1980 netty-transport-udt-4.1.118.Final.jar -rwxr-xr-x 1 openfire openfire 7310561 Feb 1 1980 ojdbc11-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 155093 Feb 1 1980 ons-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 502640 Feb 1 1980 oraclepki-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 1666060 Feb 1 1980 orai18n-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 1098916 Feb 1 1980 postgresql-42.7.7.jar -rwxr-xr-x 1 openfire openfire 260433 Feb 1 1980 rsi-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 9890 Feb 1 1980 shaj-0.5.jar -rwxr-xr-x 1 openfire openfire 32445 Feb 1 1980 simplefan-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 230352 Feb 1 1980 sitemesh-2.5.0.jar -rwxr-xr-x 1 openfire openfire 64579 Feb 1 1980 slf4j-api-2.0.9.jar -rwxr-xr-x 1 openfire openfire 51542 Feb 1 1980 startup.jar -rwxr-xr-x 1 openfire openfire 206430 Feb 1 1980 taglibs-standard-impl-1.2.5.jar -rwxr-xr-x 1 openfire openfire 40153 Feb 1 1980 taglibs-standard-spec-1.2.5.jar -rwxr-xr-x 1 openfire openfire 80659 Feb 1 1980 tinder-2.1.0.jar -rwxr-xr-x 1 openfire openfire 71976 Feb 1 1980 txw2-2.3.3.jar -rwxr-xr-x 1 openfire openfire 1503025 Feb 1 1980 ucp-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 129321 Feb 1 1980 xdb-23.7.0.25.01.jar -rwxr-xr-x 1 openfire openfire 4746045 Feb 1 1980 xmppserver-5.0.2.jar -rwxr-xr-x 1 openfire openfire 127586 Feb 1 1980 xpp3-1.1.4c.0.jar [root@yfw lib]#
最新发布
11-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值