游戏流程具体分析
捕鱼游戏流程
此项目使用springcloud微服务,springboot启动,restful风格--springmvc ,lombok插件(注解setter,getter等等作用-- 好处是代码量会减少),
swagger接口文档(方便与前端协议,进行文档管理),eureka(服务注册与发现--服务器之间调用),spring data jpa配置druid做数据源和监控,zuul(路由管理),
feign
Feign http客户端 与总控有关
eg: @FeignClient(name="ea") 客户端的名称 通知Feign在调用该接口方法是要向查询名为 ea 的服务 从而得到服务url
总结: Spring Cloud Eureka 注册中心
Spring Cloud Config 配置中心
Spring Cloud security 权限控制(现仅限于配置中心使用)
Spring Cloud hystrix 断路器
Spring Cloud Feign/Ribbon 负载请求
Spring Boot Admin 服务监控
Swagger2 Api文档输出
Lombok 代码简化
Druid 连接池,加密,监控
Logback 日志框架
Jenkins 自动化部署
PageHelper 分页助手
Redis NoSql Hibernate Validation 数据校验工具
Redis 分布式锁
Tcc/Lcn 分布式事务
通信架构使用的netty框架,高可用,是一种完全异步事件驱动,
此项目用到的netty有serversbootstrap,writeandflush( 是将传输data给客户端)--需结合rabbit生产者,消费者,交换器相互使用
a. base-server 基本服务器
关键服务器: conf-server 配置服务器--关键点(rabbitmq的用户名与密码 交换器需手动)
注意:分布式配置中心,结合spring-security/rabbitmq同时使用 eureka-server 集群 服务注册与发现 注意:服务注册中心,提供服务注册、发现功能 sleuth-server 服务链路发现 tx-manager 分布式事务
b. file-service 文件服务器
c. game-service 游戏服务器 结合swagger2提供API管理
d. game-lobby 游戏大厅服务器(提供http和websocket接口) 用到的技术:
Spring Cloud Eureka 注册中心
Spring Cloud Config 配置中心
Spring Cloud Feign/Ribbon 负载请求
Spring Boot Admin 服务监控
Swagger2 Api文档输出
Lombok 代码简化
Logback 日志框架
Jenkins 自动化部署
Netty 提供websocket接口
rabbitMQ 消息分发
e. log-service 日志服务器
f. 消息缓存:
mongodb mongotemplate
redis redistemplate
游戏逻辑服务器详细流程 -- split-fish-game 服务器
此服务器有3个module
3个module分别是 splitfish-common splitfish-server splitfish-service
1.splitfish-common 游戏逻辑服务器公共包
--annotation
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
注:在运行时可以通过反射获取到。
--bean
--constant
-game
--exception
--util
2.splitfish-server 游戏消息转发包
--client
AccountFeignClient.java
@FeignClient(name = "ACCOUNT-SERVICE")
FishGameFeignClient.java
@FeignClient(name = "splitfish-service")
--config 注:@Configuration与@Bean结合是配置类
CORSConfiguration.java 允许跨域访问配置
注: CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)
HTML5带来了CORS协议。
DecryptRequestBodyAdvice.java json请求数据解密
EncryptResponseBodyAdvice.java json请求数据加密
FeignClientConfiguration.java 配置类
RedisConfig.java
Swagger2Config.java @Configuration @EnableSwagger2 @Bean结合是配置类
--exception
LyGameException.java @RestControllerAdvice 异常报错
--fishVO 需要传给前端的数据协议 json格式
AttackVO
BulletScoreVO
EnterGameRequestVO
EnterGameResponseVO
EnterGameResponseVO
FishFormationListVO
FishFormationVO
FishRoom
FishShoalVO
GamePlayersVO
HitFishVO
LockVO
MonogodbPageVO
PlayerGameStatusMD
RequestMsgVO
SplitFishVO
TableMD
UserDetailVO
UserGameInputVo
UserInputVo
--handler
-business
AbstractGameHandler.java 抽象 业务处理类基类
FishGameHandler extends AbstractGameHandler 捕鱼handler
NettyWebSocketChannelInitializer netty通信架构 搭建websocket服务作用的额
tcp连接初始化,包装成WebSocket连接,并设置连接通道的各种配置,超时机制
注意:此类是用来处理客户端来接受的第一步通道pipeline,http连接和websocket连接处理
WebSocketFrameHandler 关键类
注意:此类关键,处理客户端来连接的逻辑,断开连接
--nettyMap
-nettyData
WebSocketData.java 连接对象
注:netty框架下发送数据的通道
NettyChannelMap.java 管理连接
注:添加,查看,获取,删除
--protocol
-common
WebSocketResponse.java 返回客户端消息
FishWebSocketRequest.java 捕鱼websocket请求
--rabbitmq
-config
Config.java 配置文件类
ServerIpconfig.java
-customer
FishMessageCustomer.java 捕鱼管理消费者
注意: rabbitmq的消费者标志 @RabbitListener(queues = "#{splitfishQueue.name}")
-handler
FishGameMQHandler.java 捕鱼mq业务逻辑
-protocol
FishRabbitmqMsgRequest.java
注意:@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
--service
-impl
FishGameServiceImpl.java 捕鱼服务
FishGameService.java 调用实现 @FeignClient(name = "splitfish-service")
--util
CodeUtils.java 与客户端的http传输协议
SpringUtil.java spring工具类
--SplitGameServerApplication.java 游戏服务启动类(netty启动)
注意:
@PropertySource(value= "classpath:/application.properties")
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
--TCPServer.java
注意: @Autowired
@Qualifier("serverBootstrap")
3.splitfish-service 游戏业务逻辑包
--client
AccountFeignClient.java @FeignClient(name = "game-service")
--config 配置文件类
FeignClientConfiguration.java
LyException.java
注意:@Slf4j
@RestControllerAdvice
@ExceptionHandler(value= Exception.class)
Swagger2Config.java
--contants
FishContants.java
--controller
FishGameController.java
注意:@RestController
@RequestMapping("/fish")
--lock
RedisLock
--mongoVO
BulletRecordVO
FishDetailVO
FishFormationVO
PlayerGameStatusMD
PlayersGameRecordVO
PlayersRecordVO
PropFishShoalVO
TableMD
--quartz
QuartzService
QueryTableMDTask
注意:@Scheduled(fixedDelay = 1000)
--rabbitmq
TopicExchangeProducer.java 消息生产者 标志:convertAndSend(RabbitTemplate)方法
--redis
vo
FishRoomConfig.java
RedisConfig.java
RedisService.java
--service
impl
AttackFishServiceImpl.java
FishGameServiceImpl.java 捕鱼服务
AttackFishService.java
FishGameService.java
--util
FishTool
MapValueComparator
--vo
AttackVO
BulletScoreVO
EnterGameResponseVO
FishFormationListVO
FishRabbitmqMsgRequest
FishRoom
FishShoalVO
FishSortVO
GamePlayersVO
HitFishVO
LockVO
MonogodbPageVO
PointVO
QueryRecordParamVO
RecordVO
RequestMsgVO
RoomConfigurationVO
RoomPlayerVO
RouteTimeVO
RouteVO
SettlementVO
SplitFishVO
UserDetailVO
UserGameInputVo
--SplitGameServiceApplication.java
注意:
@EnableSwagger2
@EnableFeignClients
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableScheduling