代码拉取完成,页面将自动刷新
auth服务
:负责登录认证。
gate服务
:负责客户端接入,也是服务器和客户端通信的媒介。
logic服务
:负责处理各种业务逻辑。
为以后将服务设计为水平可扩展的服务准备,将整个服务拆分为3个进程。
实现基本功能后的目标是将每个服务设计为可水平扩展的集群,并且重点放在架构上的优化而不是逻辑功能上。
(a)启动服务器:
maven方式
导入该工程,执行mvn clean compile
redis数据库地址
。redis-server.exe redis.windows.conf
-cfg
选项:(比如工程clone在了E盘code目录,那么就把logic的启动项改为-cfg E:\code\face2face\logic\src\main\resources\logic.xml),auth、gate同理。logic
、auth
、gate服务
(因服务间断线重连暂时未加入)(b)启动客户端:
测试注册和登录功能,以及单聊功能(建议跟踪断点):
协议流动方式介绍
:客户端先连接gate,gate服务根据客户端发送的协议类型转发到auth服或者logic,到达auth或者logic之后,IO线程将消息dispatch到后端worker线程处理。定制业务逻辑
:client.Client
类提供了进行压力测试的方法,可以修改启动客户端连接的数量Client.clientNum
,以及每秒向服务器发送的协议的频率Client.frequency
进行压力测试。实际上最简单的做法,就是利用消息中间件
对服务之间的调用进行解耦,这里以消息中间件RocketMQ为例子:
client(Producer) -> gate(Consumer)
所有用户我们都可以看做是生产者,用户操作对应生产者产生消息,gate网关服此时看做是消费者订阅用户产生的消息。我们使用RocketMQ的顺序消息
特性,保证同个用户的消息都转发到同一个消息队列,这样就保证了同个用户操作的先后。
gate(Producer) -> auth(Consumer)
gate(Producer) -> logic(Consumer)
网关服同时又可以看做是生产者,他接收到用户请求后产生逻辑操作消息,这些逻辑操作消息根据不同的类型,又可以被auth服,logic服订阅。auth,logic收到订阅的消息,此时才进行真正的消费。
使用集群模式,消费者是可以任意水平扩展的,rocketmq天生的优势保证了只要生产者消息不丢,即使某个消费者挂了,消息也能够被集群中其他consumer正确消费,但是消费的幂等性要自己保证。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。