遊戲流程具體分析

捕魚遊戲流程前端

  此項目使用springcloud微服務,springboot啓動,restful風格--springmvc ,lombok插件(註解setter,getter等等做用-- 好處是代碼量會減小),java

swagger接口文檔(方便與前端協議,進行文檔管理),eureka(服務註冊與發現--服務器之間調用),spring data jpa配置druid作數據源和監控,zuul(路由管理),web

feignredis

  Feign http客戶端 與總控有關spring

   eg: @FeignClient(name="ea") 客戶端的名稱 通知Feign在調用該接口方法是要向查詢名爲 ea 的服務 從而獲得服務urlmongodb

  總結: Spring Cloud Eureka 註冊中心json

     Spring Cloud Config 配置中心bootstrap

     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 --util2.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

相關文章
相關標籤/搜索