服务端架构整理

2月份开始尝试BOY服务端化

由于不熟悉socket和通讯基础。也不想从头开始构建C/S通讯接口。根据过去所见寻求一些快速的解决方案。

经过几天绞尽脑汁和搜索验证最后确定基本的服务端架构如下。

  • 通讯接口 直接使用 Thrift*0.13.0 是一款成熟的PRC接口方案,多语言代码一步生成,自带了TCP通讯方案。DataException全局异常处理。
  • 服务器选型 使用JAVA服务器  java 1.8  & springboot 2.2.4 的架构 参考了慕课网 2小时速成springboot开发的免费课程

      使用了自动注解 dao.DataSourceConfiguration &  SessionFactoryConfiguration 把所有mapper对象注入到运行池中

      参考DbUserDataMapperTest 可以直接使用mapper进行数据库操作

  • 数据库方面 集成了mybaties用来方便数据库操作 

      使用 ApplicationContextHolder 来读取application.xml 中的配置 然后初始化MyBatias中的各类bean,mapper

      之后又追加了一个插件MyBatias Generator 。能够直接根据当前数据表设计直接生成mybaties的entity,mapper

 

 

 

紫色 表示 java 组件. 分别于客户端和数据库通信

向下展开为java代码块

 

Cache 游戏缓存处理和回写

common 游戏常量枚举定义 部分工具类

genrator 从db数据表生成mybatis代码的工具 生成 dao entity mapper代码

Service 游戏服务 实现游戏业务逻辑

model 一些数据类 功能模块  cd friend observer equipAffix GiftCode SimpleItemModel gameMonitor

web spring原生的web controller service  .用来开放一些服务器的API 支持http请求 .GM工具 后台操纵

thrift 生成的接口定义代码 在serviceImpl中实现

tpl 模板表模块 读取,解析,生成模板表实例,存在于缓存中 .支持热更新重载

 

疑难问题

  • 使用SpringMVC mybatias Application.xml配置 事务回滚不生效问题  目前还没解决方案所以数据库操作没使用事务机制可能会存在一定风险。
  • 使用注解的sqlbean倒是能实现事务管理。但是取舍之后选择了前者。

@EnableTransactionManagement

public class TransactionManagementConfiguration implements TransactionManagementConfigurer

    @Transactional public方法上增加标签 参考 StsServiceIml.Login方法 或者 webService.deleteUser方法

  • 有收到C3P0连接池挂掉的问题 还没找到重现办法

 

 

特别注意的方面

  • 统一替换mapper映射的类名  com.qhs.sts.entity.DbUserData  = > thrift.sts.UserData 同时支持单元测试
  • mapper.xml insert自增方法调整 useGeneratedKeys="true" keyProperty="id"  keyColumn="id" 
  • 数据库模型/模板表模型/返回接口模型 3个Entity统一问题 。目前个别功能中使用 返回接口模型 替代了 数据库模型
  • 还使用了多线程变成,将thrfit的service线程独立出来
  • 后期开发了简易后台使用http对服务器进行一些GM指令的操作查询
  • 服务端增加了Thrfit访问切面的方法调用耗时跟踪策略

    LogProxyHandler 通过反射取得调用方法的methodName

 

posted @ 2020-06-02 14:27  虚空中的天行者  阅读(63)  评论(0)    收藏  举报