简介
这是 SimpleNettyChatroom
项目的后端部分介绍。如果你想看更多关于该项目前端的内容,请点击下面的链接:
如果你想浏览项目源码,请点击下面的链接:
https://github.com/ahy231/SimpleNettyChatroom
总体介绍
一个普通的 Springboot
项目,目前只实现了一对一实时通讯。在 config
包里,有登录过滤器(GlobalConfig + LoginInterceptor
)和错误处理(GlobalExceptionResolver
)。在 Controller
包里实现了两个控制器,分别是处理登录的 LoginController
(映射 \
)和处理用户页面的 UserController
(映射 \user
)。因为太懒,所以 Service
包只写了实现类,没有写接口。o(TヘTo)
Netty部分
netty
的功能都放在 netty
包下。主要是两个类:NettyServer
和 NettyServerHandler
。从上图可以看到, NettyServer
主要干了两件事,一件是把自己交给 Springboot
管理,另一件是使用了 Netty
框架构建服务器。
NettyServer
使用 @Component
注解使自己能够被 Springboot
当作容器管理,使用 @Value
注解使得属性能够从默认配置文件读取,实现 ApplicationRunner
接口使自己在启动时完成 netty
服务器的启动工作,实现 ApplicationListener<ContextClosedEvent>
使自己能随 Springboot
关闭而关闭。
在 netty
框架基本部分中,我用图中的 handler
解决了粘包、拆包的问题,将 HTTP
协议升级到 WebSocket
协议,专门用来处理即时通讯的功能。
NettyServerHandler
中的业务逻辑主要靠 channelMap
属性,channelMap
是一个从用户名到其对应的 channel
的映射,在业务处理中就可以直接通过用户名找到对应的 channel
发送消息。