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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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文件

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
人工智能 自然语言处理 并行计算
ASAL:Sakana AI 联合 OpenAI 推出自动探索人工生命的系统,通过计算机模拟生命进化的过程
ASAL 是由 Sakana AI 联合 OpenAI 等机构推出的自动化搜索人工生命系统,基于基础模型实现多种搜索机制,扩展了人工生命研究的边界。
36 1
ASAL:Sakana AI 联合 OpenAI 推出自动探索人工生命的系统,通过计算机模拟生命进化的过程
|
16天前
|
存储 人工智能 vr&ar
转载:【AI系统】CPU 基础
CPU,即中央处理器,是计算机的核心部件,负责执行指令和控制所有组件。本文从CPU的发展史入手,介绍了从ENIAC到现代CPU的演变,重点讲述了冯·诺依曼架构的形成及其对CPU设计的影响。文章还详细解析了CPU的基本构成,包括算术逻辑单元(ALU)、存储单元(MU)和控制单元(CU),以及它们如何协同工作完成指令的取指、解码、执行和写回过程。此外,文章探讨了CPU的局限性及并行处理架构的引入。
转载:【AI系统】CPU 基础
|
12天前
|
人工智能 安全 算法
CAMEL AI 上海黑客松重磅来袭!快来尝试搭建你的第一个多智能体系统吧!
掌握多智能体系统,🐫 CAMEL-AI Workshop & 黑客马拉松即将启航!
CAMEL AI 上海黑客松重磅来袭!快来尝试搭建你的第一个多智能体系统吧!
|
16天前
|
人工智能 缓存 并行计算
转载:【AI系统】CPU 计算本质
本文深入探讨了CPU计算性能,分析了算力敏感度及技术趋势对CPU性能的影响。文章通过具体数据和实例,讲解了CPU算力的计算方法、算力与数据加载之间的平衡,以及如何通过算力敏感度分析优化计算系统性能。同时,文章还考察了服务器、GPU和超级计算机等平台的性能发展,揭示了这些变化如何塑造我们对CPU性能的理解和期待。
转载:【AI系统】CPU 计算本质
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
MMAudio:开源 AI 音频合成项目,根据视频或文本生成同步的音频
MMAudio 是一个基于多模态联合训练的高质量 AI 音频合成项目,能够根据视频内容或文本描述生成同步的音频。该项目适用于影视制作、游戏开发、虚拟现实等多种场景,提升用户体验。
67 7
MMAudio:开源 AI 音频合成项目,根据视频或文本生成同步的音频
|
16天前
|
机器学习/深度学习 存储 人工智能
转载:【AI系统】计算之比特位宽
本文详细介绍了深度学习中模型量化操作及其重要性,重点探讨了比特位宽的概念,包括整数和浮点数的表示方法。文章还分析了不同数据类型(如FP32、FP16、BF16、FP8等)在AI模型中的应用,特别是FP8数据类型在提升计算性能和降低内存占用方面的优势。最后,文章讨论了降低比特位宽对AI芯片性能的影响,强调了在不同应用场景中选择合适数据类型的重要性。
转载:【AI系统】计算之比特位宽
|
16天前
|
机器学习/深度学习 人工智能 算法
转载:【AI系统】关键设计指标
本文介绍了AI芯片的关键设计指标及其与AI计算模式的关系,涵盖计算单位(如OPS、MACs、FLOPs)、关键性能指标(精度、吞吐量、时延、能耗、成本、易用性)及优化策略,通过算术强度和Roofline模型评估AI模型在芯片上的执行性能,旨在帮助理解AI芯片设计的核心考量与性能优化方法。
转载:【AI系统】关键设计指标
|
16天前
|
机器学习/深度学习 人工智能 并行计算
转载:【AI系统】AI轻量化与并行策略
本文探讨了AI计算模式对AI芯片设计的重要性,重点分析了轻量化网络模型和大模型分布式并行两大主题。轻量化网络模型通过减少模型参数量和计算量,实现在资源受限设备上的高效部署;大模型分布式并行则通过数据并行和模型并行技术,解决大模型训练中的算力和内存瓶颈,推动AI技术的进一步发展。
转载:【AI系统】AI轻量化与并行策略
|
6天前
|
机器学习/深度学习 人工智能 搜索推荐
AI在电子商务中的个性化推荐系统:驱动用户体验升级
AI在电子商务中的个性化推荐系统:驱动用户体验升级
54 17
|
5天前
|
人工智能 安全 机器人
OpenAI重拾规则系统,用AI版机器人定律守护大模型安全
在人工智能领域,大语言模型(LLM)展现出强大的语言理解和生成能力,但也带来了安全性和可靠性挑战。OpenAI研究人员提出“规则基于奖励(RBR)”方法,通过明确规则引导LLM行为,确保其符合人类价值观和道德准则。实验显示,RBR方法在安全性与有用性之间取得了良好平衡,F1分数达97.1。然而,规则制定和维护复杂,且难以完全捕捉语言的多样性。论文:https://arxiv.org/pdf/2411.01111。
41 13

热门文章

最新文章