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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 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文件

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
人工智能 监控 安全
提效40%?揭秘AI驱动的支付方式“一键接入”系统
本项目构建AI驱动的研发提效系统,通过Qwen Coder与MCP工具链协同,实现跨境支付渠道接入的自动化闭环。采用多智能体协作模式,结合结构化Prompt、任务拆解、流程管控与安全约束,显著提升研发效率与交付质量,探索大模型在复杂业务场景下的高采纳率编码实践。
554 26
提效40%?揭秘AI驱动的支付方式“一键接入”系统
|
3月前
|
人工智能 安全 API
20 万奖金池就位!Higress AI 网关开发挑战赛参赛指南
本次赛事共设三大赛题方向,参赛者可以任选一个方向参赛。本文是对每个赛题方向的参赛指南。
428 34
|
3月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
3月前
|
人工智能 自然语言处理 前端开发
最佳实践2:用通义灵码以自然语言交互实现 AI 高考志愿填报系统
本项目旨在通过自然语言交互,结合通义千问AI模型,构建一个智能高考志愿填报系统。利用Vue3与Python,实现信息采集、AI推荐、专业详情展示及数据存储功能,支持响应式设计与Supabase数据库集成,助力考生精准择校选专业。(239字)
441 12
|
3月前
|
人工智能 运维 安全
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向 AI 原生架构演进。阿里云函数计算(FC)率先提出并实践“Serverless AI 运行时”概念,通过技术创新与生态联动,为智能体(Agent)开发提供高效、安全、低成本的基础设施支持。本文从技术演进路径、核心能力及未来展望三方面解析 Serverless AI 的突破性价值。
|
3月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
5225 75
|
人工智能 自然语言处理 前端开发
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
淘宝推荐信息流业务,常年被“需求多、技术栈杂、协作慢”困扰,需求上线周期动辄一周。WaterFlow——一套 AI 驱动的端到端开发新实践,让部分需求两天内上线,甚至产品经理也能“自产自销”需求。短短数月,已落地 30+ 需求、自动生成 5.4 万行代码,大幅提升研发效率。接下来,我们将揭秘它是如何落地并改变协作模式的。
578 37
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
|
3月前
|
存储 人工智能 搜索推荐
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
本文介绍基于LangGraph构建的双层记忆系统,通过短期与长期记忆协同,实现AI代理的持续学习。短期记忆管理会话内上下文,长期记忆跨会话存储用户偏好与决策,结合人机协作反馈循环,动态更新提示词,使代理具备个性化响应与行为进化能力。
722 10
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
|
3月前
|
人工智能 IDE 开发工具
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
|
3月前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
424 6

热门文章

最新文章