登录的流程,从端到端的角度来说,包括如下环节:
- 客户端发送登录数据包。
- 服务端进行用户信息验证。
- 服务器端创建Session会话。
- 服务器端返回登录结果的信息给客户端,包括成功标志、Session ID等。
本章节将实现服务端登录的相关逻辑,其中涉及的主要模块如下:
- Handler模块:客户端请求的处理
- Processor模块:以异步的方式完成请求的业务逻辑处理
- Session模块:管理用户与通道的绑定关系
首先创建chatserver模块,服务端代码大多在该模块中实现。
ProtoBufBuilder模块
该模块用于存放消息的Bean。
User
User类是服务端和客户端共用的类,放到chatcommon模块中,先把成员变量写上,后续使用到具体方法再添加:
|
|
LoginResponseBuilder
|
|
ChatMsgBuilder
|
|
Session模块
Session模块是基础,先构建出来,其中有两个重要的类。
SessionMap
用来保存所有的ServerSession:
|
|
ServerSession
为每个登录的用户维护一个ServerSession:
|
|
Processor模块
processor模块有一个基础接口和一个抽象类:
|
|
|
|
LoginProcessor
登录处理逻辑:
|
|
Concurrent模块
因为Handler中的业务Processor都是异步处理的,先在comon模块中添加一些多线程相关的工具类。首先在common模块中添加sl4j依赖:
|
|
CallbackTask
支持回调的任务接口:
|
|
CallbackTaskScheduler
支持回调的异步任务,首先引入guava依赖:
|
|
|
|
Handler模块
该模块处理Netty入站消息。
LoginRequestHandler
|
|
ServerExceptionHandler
处理异常的Handler:
|
|
HeartBeatServerHandler
用来处理心跳消息:
|
|
组装流程
基础模块完成的差不多了,现在将它们通过Netty、以及SpringBoot给组装起来。
ChatServer
Netty服务端实现,首先添加配置文件application.yml:
|
|
|
|
ServerApplication
SpringBoot启动类:
|
|
运行
至此服务端的登录功能完成了,启动ServerApplication,成功日志如下:
|
|
下面将实现客户端的登录功能,届时再进行调试。