Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

看了很多文章,趟过了很多坑,现在总结一下,一个作为自己的备份,另一个也是帮助他人。

项目里面服务器开一个端口为HTTP提供服务,另外一个端口为WebSocket提供服务。

项目采用技术:
Spring Boot , Tomcat8(Spring Boot内嵌),Netty(4.1.19),WebSocket
Redis、MySQL、JPA、JUnit等
另外部署时还使用了阿里的SLB 和 自己配置的Nginx

Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

因为业务比较特殊,需要在客户端连接服务器端的同时在Http header中发送token信息,
而这个在Netty封装的WebSocket服务器端无法在握手的同时正常解析header中的数据
(使用bing.com 搜索到有英文网站上有人提出类似的问题,其解决方案是在修改Netty的
HandlerShaker代码,使用反射,将自己的逻辑加入进去,个人觉得不太优雅,干脆只用
Netty做HTTP的服务器,而使用Spring Boot内嵌的tomcat作为websocket的Server提供者)

Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】

application.properties 的部分配置
Spring Boot 在Netty上开发WebSocket和HTTP应用之一 【服务器端HTTP(S)/WebSocket(WSS)实现及配置篇】