NFT数藏项目系统开发丨NFT数藏AI绘画功能系统开发流程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: NFT数藏项目系统开发丨NFT数藏AI绘画功能系统开发流程
  1. 准备工作:

1) 申请后台代码编译/部署用的私服

2) 申请后台代码权限

3) 找到后台同学的wiki地址,搞清专业术语

4) 把Linux/vim/svn命令打印出来贴在桌上,

5) 花1-2个小时安装和掌握相关操作,如ScureCrt或XShell WinSCP

6) 使用记事本记录操作步骤和遇到的问题,推荐使用印象笔记本

准备工作结束后,就可以开始着手私服的搭建工作。客户端程序员从事后台开发,对于写逻辑代码并不是太难的事情,前后台逻辑区别不大。难点在于熟悉后台的操作,调试和部署,我花了近1周(包括周末)的时间才把私服环境配置好,编译并部署成功,想想当时的兴奋仍回荡脑海。期间踩了不少坑,把root用户密码删除导致需要运维同学帮忙重装系统和各种相关软件。下面是我搭建天天炫斗私服记录的步骤,以此为例,或许对其它后台开发有抛砖引玉之功效。

通过该文档, 您将了解到如下流程:申请机子(TLinux)-安装系统-安装必要软件-下载代码-编译-远行游戏-开发新功能-编译-调试-外网问题跟进。

下面列出一些专业术语:

1.IDIP:给客服查询钻石消耗/删除道具/增加道具等接口,接收来自网页的请求, 由专门的IDIPSvr处理

  1. TCM:进程集中管理系统,控制所有分布在不同机器的不同事务进程的start、stop,配置刷新等
  2. TConnd:登录验证
  3. TLog: 记得道具消耗的流水日志

5.GameSvrd: 负责游戏的逻辑

  1. DBSvrd: 负责游戏数据存储与读取
  2. 搭建登录私服

第一步是先使用SecureCRT登录私服

1) 安装svn, 执行如下命令
rpm -ivh http://172.27.202.121/tlinux/tlinux/1.0/cr/x86_64//RPMS/subversion-1.6.11-2.el6_1.4.x86_64.rpm http://172.27.202.121/tlinux/tlinux/1.0/cr/x86_64//RPMS/subversion-svn2cl-1.6.11-2.el6_1.4.noarch.rpm http://172.27.202.121/tlinux/tlinux/1.0/os/x86_64/Packages/neon-0.29.3-1.2.el6.x86_64.rpm http://172.27.202.121/tlinux/tlinux/1.0/os/x86_64/Packages/libproxy-0.3.0-2.el6.x86_64.rpm http://172.27.202.121/tlinux/tlinux/1.0/os/x86_64/Packages/pakchois-0.4-3.2.el6.x86_64.rpm http://172.27.202.121/tlinux/tlinux/1.0/os/x86_64/Packages/libproxy-bin-0.3.0-2.el6.x86_64.rpm http://172.27.202.121/tlinux/tlinux/1.0/os/x86_64/Packages/libproxy-python-0.3.0-2.el6.x86_64.rpm

2) 安装mysql,
参考《IDC机器安装mysql》

/WeFight/wikis/view/IDC%2525E6%25259C%2525BA%2525E5%252599%2525A8%2525E5%2525AE%252589%2525E8%2525A3%252585mysql

3) 添加Hosts
确保机子可以访问svn和msdktest.qq.com, 用root用户修改/etc/hosts文件,增加一下两行(如果不能访问msdktest.qq.com, 创建角色会提示56错误)

10.14.40.10 tc-svn.tencent.com

10.194.146.218 msdktest.qq.com

4) 迁出SVN
在/data/home/user00中迁出svn线

svn co https://tc-svn.tencent.com/xxxxxx/Develop_branch

svn co https://tc-svn.tencent.com/xxxxxx/Develop_branch/apps

建立软链接, 编译代码后可以直接运行, 不需要解包:

ln -s Develop_branch vxd

5) 修改TCM配置及端口
(如二个人共用一个私服,一服多TCM需要)

1) 更改数据库(1.apps/tcm/conf_template/ 2. vxd/common/para )

1) sed -i 's/dbVXD/dbAlbertVXD/g' grep -rl 'dbVXD' apps/tcm/conf_template

2) sed -i 's/dbVXD/dbAlbertVXD/g' grep -rl 'dbVXD' vxd/common/para

2) 修改程序执行路径(apps/tcm/cfg/proc.xml WorkPath='/data/home/user00/vxd/' )

1) sed -i 's/user00/yourname/g' `grep -rl 'user00' apps`

2) sed -i 's/user00/yourname/g' `grep -rl 'user00' vxd`


3) 修改端口号, 建议前面加数字, 如18080 , 需要修改的地方比较多

            文件apps/tcm/cfg/proc_deploy.xml

4) 申请外网访问的端口权限

一般申请三个端口权限:tconnd_dirs、tconnd_pvps、tconnd_gsvr

申请地址: /net_access_control/input

(参考:

/WeFight/wikis/view/%2525E4%2525B8%252580%2525E9%252594%2525AE%2525E6%252590%2525AD%2525E7%2525A7%252581%2525E6%25259C%25258D

/WeFight/wikis/view/tcm%252B%2525E5%252585%2525A5%2525E9%252597%2525A8%2525E7%2525AF%252587)

6) 使Develop_branch中的sh可执行

 find . -name '*.sh' -exec chmod 777 {} \;

7) 创建DB数据库

 执行 Develop_branch/dbcreatesql/create_alldb.sh 创建DB库

 创建如下几个db:

dbVXDBossdbVXDGamedbVXDGameIDdbVXDGameLogdbVXDGuilddbVXDMaildbVXDNamedbVXDTopListdbVXDMatch

8) 初始化tcm(初始化ip端口,tbus管道)

 #init脚本需要两个参数,本机IP  以及 Index

 #Index需要看本机已经部署了几套tcm,  如果之前已经存在一个tcm(ps aux|grep tcmcenter 查看), Index填2即可

 ./init_all.sh localhostid 2

 ./start_all.sh

9) 查看TCM是否起来:

  ps aux|grep tcmcenter

10) 全量编译服务器代码

     进行~/vxd/

 1) checkout.sh

 2) build.sh debug

 3) packall.sh dev(如果vxd和Develop_branch是软链接, 只需要执行一次,为了使vxd/多一次新生成的目录)

 4) tar xzvf vxd_20*****.tgz -C ../

11) 启动程序
(如TCM没有启动,请求参考8步启动TCM)进入/apps/tcm/bin)

 1) ./stop_tcmcenter.sh

 2) ./start_tcmcenter.sh

 3) ./start_tcmconsole.sh 后,进入tcm终端

12) TCM操作
(如果提示pid文件找不到, 可能是因为配置没有, 需要执行下面的命令)

 1)新环境创建tbus管道

      RefreshBusCfg *.*.*.*

 2)创建配置并下发(tcm的配置改变了, 需要执行)

      createcfg *.*.*.*

      pushcfg *.*.*.*

 3) 起停所有进程

      stop *.*.*.*

      start *.*.*.*

 4) 如果发现启动某个进程失败,使用tcm命令:

      listproc 1.1.11.1

 5) 可以查看到失败的进程名称以及IP,然后到对应的日志目录查看失败原因,日志目录默认为:/data/home/user00/log

13) 私服起来后,使用客户端登录验证
1 )在客户端res/config/LoginDir/下添加私服dir配置(如:client.xml)
2 )将私服私线的protoco/cs_protocol外链到客户端,生成协议重新编译
3 )客户端选择登录该私服
4 )可能遇到的问题:
提示网络不太好,先检查客户端和私服协议是否一致。再查看gameserver错误日志和dbserver错误日志
如提示网络不太好(3), 查看gameserver没有对应的日志, 需要查看dbserver: handler, executor和dbsvrd.log三类日志都需要看, 发现缺少对应的字段, 需要在dbserver中调用.sh脚本创建表
如提示网络不太好(56),msdk关系链无法拉到,过几分钟后再试,如果问题还是出现,在私服中ping msdktest.qq.com是否通,详细参考前面步骤. 另一个可能是数据库字段被修改了, 需要cleardb
如登录小区提示: '网络不太好,请重新登录(35)'错误时, 需要申请私服IP访问msdk的权限

  1. 项目代码编写与编译

1 使用您熟悉的IDE修改服务器代码。因为天天炫客户端使用IDE是Vs2008,把后台代码导入到vs2008是个不错的选择。但手动导入费时费事,很多临时代码是难过xml生成的。CMake是非常好用的工程组织工具,我通过CMake把后台功能导到vs2008中,根据makefile配置宏和include头文件和库,所以有非常好的智能感知。下面是客户端和后台的工程,如果不编译调试仅写代码,是否觉得没有任何区别

CMakeLists.txt生成项目,做小小的修改inlude目录和宏,对任何工程项目都适用:

2 同步编写好的代码到私服上,一般使用WinSCP同步到私服上。如果是私线,可以直接commit到svn同步。还有一种方法是在私服上建samba共享目录,pc上连接该共享目录,直接在共享目录上编写代码。在linux上执行编译命令和部署。还有一种方案是VS2015+VisualGDB,可以在vs2015上推送文件到Linux上编译执和调试,看起来很高大上,但该方法没有尝试过。

3 执行过一次全量编译后, 小的修改可能增量编译

如果只修改了GameSvrd的代码, 进入vxd/gamesvrd/src/,

make –j16 (make –j 可以实现联合编译)

如果改了协议, 需要重新生成协议:

vxd/gamesvrd/src/upate_protocol.sh

如果修改了后台字符串

cd ~/vxd/tools/CreateSourceFile/bin

 ./CreateSourceFile ../../../common/common/i18n_string/i18nString.xml

如果出错, 重复第1步

  1. 刷新Gamesvr配置

1 修改配置目录(通过同步软件上传配置)

/data/home/user/vxd/common/common

2 进入私服上的gameserver执行目录

/data/home/user/vxd/gamesvrd/bin

3 查看进程id(格式如6.1.11.1)

ps aux|grep gamesvrd

4 执行如下命令

./refreshgamesvrd.sh 6.1.11.1

  1. 后台功能介绍

1 不同的事务放在不同的文件夹下,如gamesvr, dbsvr,

2 ISvrCtrl所有服务控件模块的基类, Main函数调用ISvrCtrl::Run(), Run执行:

     1) 加载tcm配置

     2) DoInitialize():1)加载日志配置文件CLogCfg::Initilize(); 2) CGameCtrl::Initialize() 各种数据/资源池的初始化

     3) while(1): CGameCtrl::Update()->CGameCtrl::RecvClientMsg()处理服务器消息.

/data/home/user00/apps 链接Develop_branch/apps

/data/home/user00/vxd 链接Develop_branch

1)代码结构
游戏服务器(gamesvrd):

               bin:编译后的.so文件,启动脚本

               config:服务器自用的配置文件

               src: 源代码

               lib: 动态库

DB服务器(dbsvrd):

协议(protocol):

protocol/cs_protocol

共享配置:

Common/common/

其它服务器(服务器之间通过tcp通信)

Xxxsvrd,

公共库

libs/common所有服务器都会使用的代码/共用接口/工具apk

第三方静态库

Libs/lib

客户端共享:

libs/GamePlay

TCM目录

apps/

     tagent

     tcenterd

     tcm

     tconnd

     tools

2) 服务器架构
服务器总架构图,各服务之间通过socket通信,服务标识号类似ip,如1.1.11.1代表gameserver

【gs集群】<->[proxy集群]<->[dbsvrd集群]【其他服务】

3) GameSvrd启动流程

4) 角色登录流程

5) TCM基本构建

6) 协议定义
1 客户端与服务器通讯协议在protocol\cs_protocol添加协议字段

cs_com_item.xml:

cs_com_msg.xml

2 服务器内部存储协议在protocol中添加

svr_com.xml

3在gamesvrd\src\ update_protocol.bat(win)生成gameserver协议

7) 更新DB表字段的过程:

   gamesvrd/Player -> DBHandle -> DBExecutor -> SQLHelper::Update


8) 读取DB表字段的过程:

   SQLHelper::Select -> DBExecutor -> DBHandle -> Player


  1. 调试

后台调试主要有GDB和看LOG, 其中LOG是主要的调试方式

  1. GDB断点

1)附加到对应进程

gdb attach pid

2)设置断点,可直接设置某个文件中的某一行

b filename:linenum

3)让进程继续执行

c

4)退出

detach或quit

5)进入函数

S

6) 删除断点

delete num

  1. 日志跟踪
    1 服务器日志目录 /data/home/user00/log/xxxx/xxx.log

         如:gamesrv的日志在gamesvrd.1.1.11.1, gamesvrd.log是通用的日志, player/下面的是与角色相关的日志
    

2 apollo日志目录 /data/home/user00/vxd/apollo_sns/log/

3 tversion日志 /data/home/user00/vxd/tversionsvr/log

  1. Crash跟进

查看core文件(core文件在/data/corefile)

 gdb  ~/vxd/gamesvrd/bin/gamesvrd -c /data/corefile/core_gamesvrd_1430644548.7768

 bt(或where查看堆栈)
  1. 外网问题跟进

1). 外网玩家信息查询步骤
1 通过QQ或WX找到openid

/index4.html?auth_cm_com_ticket=1c8908dc-a64a-4ada-a71b-c264867d1754#!/service/16075

2 登录MNET, 把Develop_branch/toos/scripts/目录上传到跳板机上,

3 填写脚本里面的用户名和密码(MNET的帐户), 几乎所有脚本都需要填写用户名和密码, 直接运行脚本不带参数会有提示

4 设置xxx.sh权限

 chmod 777 *

5 通过openid查到角色ruid

 ./GetRuid.sh ado qq openid

6 通过ruid查到角色db信息(输出到PlayerDBInfo.txt中)

 ./GetInfo.sh ado qq game role 2257327448916329 > PlayerDBInfo.txt

7 查服务器IP列表信息

 ./jump.sh pub_qq

8 登录对应的服务器

 ./jump.sh pub_qq 1(通过序号, 会自动切换到user00用户)

 同在跳板机上执行: ssh 10.205.139.86 -p 36000 -l albertzhong

2). 打开日志的办法
1 登录到对应的服务器(通过jump.sh脚本)

2 进入/data/home/user00/vxd/gamesvrd/config/server/ 修改locallogcfg.xml.1.7.11.1

3 进入/data/home/user00/vxd/gamesvrd/bin/ 运行 ./refreshgamesvrd.sh, 用户重新登录后, 就会有日志

  1. 常见问题
  2. SecureCRT乱码
  1. 私服上执行svn up命令提示编码问题时, 请执行:export LC_CTYPE=”zh_CN.UTF-8”
  2. 如果启动服务进程时, 提示deplop_xxx_....xml时, 可能是配置有问题, 需要重新更新apps/tcm/cfg中的配置, 5月2号就是遇到该问题, 因为ADDR和PORT里面的数值是空的
  1. 如果是Libs中的源代码改变了, 比如与客户端共用的代码GamePlay/EntryCfg, 需要到Libs/Gameplay目录下执行make –j16进行编译.
  2. 如果经常提示56错误, 先看看主机能否ping通msdk的服务器, 另一个可能是数据库字段被修改了, 需要执行清理DB操作
  3. 时间校对: /bin/sh /usr/local/ieod-public/ntpdate/ntpdate.sh -f (用root 登录)
  4. 如果机子挂了后, 需要重新启动进程, 步骤如下:

    1) 非常重要的一步, 首先查看mysql是否起来在root下启动mysql: /etc/init.d/mysqld start

    2) ~/apps/init_all.sh 10.12.153.88 1

    3) ~/apps/start_all.sh 10.12.153.88 1

    4) ~/apps/tcm/bin/start_tcmconsole.sh

     1) RefreshBusCfg *.*.*.*
    
     2) createcfg *.*.*.*
    
     3) pushcfg *.*.*.*
    
     4) start *.*.*.*
    
  5. 如果启动某个服务失败, 可能是配置问题, 尝试tcm中的createcfg ... 和 pushcfg ...

如果关闭某个服务失败, 也可能是配置问题, 执行上面的操作

  1. 装备, 道具的实倒, 是在统一的资源池中获得, 资源会重复利用, 删除后的物品, 增加新物品, 会使用到相同的Gid

问题: 符石升级后, 发现旧符石与新符石的Gid是一样的, 原因是使用了统一的资源池

10.在登录事务未处理完后, 不能更新DB, 因为DBServer无法获得有效的Session, 会被跳出来(错误码2), 但不知道Equip什么能更新成功

11.如果旧角色登录不了, 新角色可能登录, 可能是因为角色身上的物品ID是旧的

12.修改SQLHelper.xml后, 使用同级目录下的SQLHelper.bat生成.cpp和.h文件

13.状态统计需要在stat.xml中定义字段, 然后生成cpp和h文件

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
94 9
|
2月前
|
人工智能 弹性计算 搜索推荐
打造个性化的微信公众号AI小助手:从人设到工作流程
在数字化时代,一个有个性且功能强大的AI小助手能显著提升用户体验。本文档指导如何在微信公众号上设置AI小助手“小智”,涵盖其人设、功能规划及工作流程设计,旨在打造一个既智能又具吸引力的AI伙伴。
64 0
|
2月前
|
人工智能 自然语言处理 机器人
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
10 月 18 日, InfoQ《C 位面对面》栏目邀请到阿里云 CIO 及 aliyun.com 负责人蒋林泉(花名:雁杨),就 AI 时代企业 CIO 的角色转变、企业智能化转型路径、AI 落地实践与人才培养等主题展开了讨论。
1292 67
对话阿里云 CIO 蒋林泉:AI 时代,企业如何做好智能化系统建设?
|
12天前
|
机器学习/深度学习 人工智能 算法
【AI系统】AI芯片驱动智能革命
本课程深入解析AI模型设计演进,探讨AI算法如何影响AI芯片设计,涵盖CPU、GPU、FPGA、ASIC等主流AI芯片,旨在全面理解AI系统体系,适应后摩尔定律时代的技术挑战。
31 5
|
2月前
|
存储 人工智能 自然语言处理
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
高级 RAG 技术:提升生成式 AI 系统输出质量与性能鲁棒性【预检索、检索、检索后、生成优化等】
|
29天前
|
存储 人工智能 文字识别
AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
本文介绍了纸质档案数字化的技术流程,包括高精度扫描、图像预处理、自动边界检测与切割、文字与图片分离抽取、档案识别与文本提取,以及识别结果的自动保存。通过去噪、增强对比度、校正倾斜等预处理技术,提高图像质量,确保OCR识别的准确性。平台还支持多字体识别、批量处理和结构化存储,实现了高效、准确的档案数字化。具体应用案例显示,该技术在江西省某地质资料档案馆中显著提升了档案管理的效率和质量。
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗领域的革命:智能诊断系统的未来
在科技日新月异的今天,人工智能(AI)技术正逐渐渗透到我们生活的每一个角落,其中医疗领域尤为显著。本文将探讨AI在医疗诊断中的应用及其带来的变革,重点介绍智能诊断系统的发展现状与未来趋势。通过深入浅出的方式,我们将揭示AI如何改变传统医疗模式,提高诊断效率和准确性,最终造福广大患者。
|
1月前
|
人工智能 安全 网络安全
揭秘!大模型私有化部署的全方位安全攻略与优化秘籍,让你的AI项目稳如磐石,数据安全无忧!
【10月更文挑战第24天】本文探讨了大模型私有化部署的安全性考量与优化策略,涵盖数据安全、防火墙配置、性能优化、容器化部署、模型更新和数据备份等方面,提供了实用的示例代码,旨在为企业提供全面的技术参考。
93 6
|
12天前
|
机器学习/深度学习 存储 人工智能
【AI系统】计算之比特位宽
本文详细介绍了计算机中整数和浮点数的比特位宽概念及其在AI模型中的应用。通过对比特位宽的定义、整数与浮点数的表示方法、AI中常用的数据类型(如FP32、TF32、FP16、BF16、FP8和Int8)及其在模型训练和推理中的作用进行了阐述。特别关注了FP8数据类型在提高计算性能和减少内存占用方面的新进展,以及降低比特位宽对AI芯片性能的影响,强调了低比特位宽在AI领域的重要性。
25 0
|
2月前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
282 6