【日志服务CLS】腾讯云游戏对战引擎 MGOBE接入CLS
事先说明:
此篇文章重在介绍:"操前准备",实际操作会在下篇介绍.
里面用的游戏开发引擎是unity,使用腾讯云游戏对战引擎,接入得是腾讯云中得日志服务CLS.
此操作得用处:
游戏联机对战引擎 MGOBE 的采集的实时服务器日志将上报到 日志服务 CLS,开发者可登录 日志服务控制台 查看。
那么我们首先该怎么使用呢?如果你只是想尝试一下产品的话,那么你可以登陆 这个网址 中查看免费的使用.如果觉得合适,你就可以付费使用.
登陆这个网址之后会见到如下界面:
如果你想要去看其他的产品,点击对应的按钮即可,那么这里,我来演示一下如何接入腾讯云游戏对战引擎 MGOBE,并获取里面的日志消息.
首先我们点击腾讯云游戏对战引擎 MGOBE的按钮
进到介绍:如何使用实时服务器日志,那么在使用之前,得有两个必要条件,首先是要有一个游戏在腾讯云中正在跑,还有一个必要条件就是你已经有了一个实力得服务器,如果你没有,那也不用担心,腾讯云会给你一个可以使用得示例服务器,也可以拿来测试一下.
那么首先,我们先开通并创建一个游戏服务:
在腾讯云的官网上直接搜索:"对战引擎",第一个就是,点击立即使用就可以来到控制台,如果你是第一次使用,那么它会提示你一些需要勾选一些条款.勾选之后,你就可以新建一个自己的游戏了
那么选择你要做的游戏,每一种游戏提供的服务是不一样的.我这里选择的是unity类型的游戏,建好了之后,会看到具体的信息:
最重要的就是前3个信息,一定要保存好,不能泄露,如果泄露了,别人会根据你的这个信息来使用你的流量.当我做完这个功能,我就会删除这个游戏,大家也不用记录.
里面的计费方式:
游戏联机对战引擎 MGOBE 于2019年8月12日正式开启公测,用户在此期间可免费使用。免费期限截止于2019年12月31日,从2020年1月1日开始正式计费。
游戏联机对战引擎 MGOBE 按游戏 DAU 以及流量用量计费,日结后付费。
您可以在游戏联机对战引擎 MGOBE 的控制台内使用云开发 TCB 服务,TCB 的计费与 MGOBE 相互独立。
DAU 定价
付费类型 |
DAU 范围 |
单价(元/DAU/日) |
---|---|---|
国内站价格 |
||
DAU ≤ 500 |
0 |
|
500 < DAU ≤ 8000 |
0.0031 |
|
8000 < DAU ≤ 2W |
0.0027 |
|
2W < DAU ≤ 5W |
0.0025 |
|
5W < DAU ≤ 10W |
0.0024 |
|
DAU > 10W |
联系商务报价 |
注意:
- 玩家初始化成功即算作 DAU,DAU 按照一个游戏一天内的 player ID 去重计算(player ID 是游戏内用户的唯一标识符,一个游戏内的一个用户对应一个 player ID)。
- DAU 计费模式为从免费额度开始,享受累进阶梯价,即每段 DAU 使用一个单价,每个阶梯内的用量与该阶梯的单价相乘,累加后得出总价。
流量定价
免费流量(活动期间)
游戏联机对战引擎 MGOBE 活动期间(从即日起至2021年12月31日)向您赠送部分流量,赠送规则如下:
- 每个游戏赠送流量额度为1GB/天,赠送流量仅可用于游戏联机对战引擎。当天产生的赠送额度当天有效。
- 若当天流量消耗超过赠送额度,超额部分需要按流量定价标准按量付费。
流量定价标准
付费类型 |
单价(元/GB) |
---|---|
国内站价格 |
0.8 |
注意:
上述所有“流量”均表示出流量;入流量不产生流量费用。
费用示例
某游戏一天的 DAU 数据为2560,产生2GB流量。
赠送流量额度:1GB
该游戏当天的费用分为两部分:
- DAU 费用:500 × 0 + (2560 - 500) × 0.0031 = 6.386元
- 流量费用:(2GB - 1GB) × 0.8 = 0.8元
该游戏当天产生的总费用为:6.386 + 0.8 = 7.186元
当然,如果你是一个测试的用户,那么这些免费额度足够你来测试了.
那么我们再来做第二个必要条件:实时服务器,也许,你没有这样的服务器,那你也不用担心,因为腾讯云中提供了一个完整的框架,你只需要下载并且在里面修改即可.
其实这个服务器的功能并不是要和CLS对接产生日志,其实它是一个游戏服务器的一个"扩展",比如游戏服务端拓展逻辑,如保存玩家数据,游戏状态同步等.
那么下载下来之后查看里面的文件:
需要我们自己动手修改的,大部分都在index文件中.我们先尝试着打开这个文件来查看里面的代码:
import { mgobexsInterface } from './mgobexsInterface';
const gameServer: mgobexsInterface.GameServer.IGameServer = {
mode: 'sync',
onInitGameData: function (): mgobexsInterface.GameData {
return {};
},
onRecvFromClient: function onRecvFromClient({ actionData, gameData, SDK, room, exports }: mgobexsInterface.ActionArgs<mgobexsInterface.UserDefinedData>) {
gameData.pos = Math.floor(Math.random() * 2000);
SDK.logger.debug('onRecvFromClient', gameData, actionData);
setTimeout(() => {
SDK.sendData({ playerIdList: [], data: { data: gameData, ts: new Date().toISOString() } }, { timeout: 2000, maxTry: 3 });
SDK.exitAction();
}, gameData.pos);
},
onJoinRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onJoinRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onCreateRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onCreateRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onLeaveRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onLeaveRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onRemovePlayer: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onRemovePlayer',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onDestroyRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onDestroyRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeRoom: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeRoom',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeCustomPlayerStatus: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeCustomPlayerStatus',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangePlayerNetworkState: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangePlayerNetworkState',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onStartFrameSync: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onStartFrameSync',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onStopFrameSync: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onStopFrameSync',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
onChangeRoomPlayerProfile: function ({ actionData, gameData, SDK, room, exports }) {
SDK.logger.debug(
'onChangeRoomPlayerProfile',
'actionData:', actionData,
'gameData:', gameData,
'room:', room
);
},
};
// 服务器初始化时调用
function onInitGameServer(tcb: any) {
// 如需要,可以在此初始化 TCB
const tcbApp = tcb.init({
secretId: "请填写腾讯云API密钥ID",
secretKey: "请填写腾讯云API密钥KEY",
env: "请填写云开发环境ID",
serviceUrl: 'http://tcb-admin.tencentyun.com/admin',
timeout: 5000,
});
// ...
}
export const mgobexsCode: mgobexsInterface.mgobexsCode = {
logLevel: 'error+',
logLevelSDK: 'error+',
gameInfo: {
gameId: "请填写游戏ID",
serverKey: "请填写后端密钥",
},
onInitGameServer,
gameServer
}
那么会看到里面有房间相关的,玩家状态相关的,还有一些帧同步相关的.当然,里面还有一些需要你填写你的,那么我们先把这个填好,然后再次压缩成zip文件.
部署实时服务器
登录 游戏联机对战引擎控制台,单击左侧菜单【自定义服务逻辑】>【实时服务器】。
单击【创建服务】,进入新建服务界面。
里面有几个选项需要说明的是:
- 选择是否打通 VPC 网络。打通腾讯云的 VPC 网络,可以访问您 VPC 下的数据库和存储,开通后不可变更。
- 若您选择打通 VPC ,而 VPC 下拉菜单为空,则您需要先去 私有网络 创建一个 VPC;建议您在上海地区创建 VPC,如在其他地区创建,则需通过 对等连接 实现 VPC 跨地域通信(上海和其他地区),并为对等连接付费。
设置实例数量范围,最大值为20。默认为自动调节,即在设定的实例范围内自动调节,不会超出该设定范围。
然后,点击部署,即可完成,那么到这里,我们的一个基本介绍与操前准备就完成了
继续往下做,那么要把index.js文件中的需要填好的信息填好,比如:
添加描述
gameid和serverKey,这两个字段都可以在你的游戏对战引擎控制台找到它,复制过去就可以了.
那么接下来要填写的是:
添加描述
那么这几个需要填写,首先前两个都好说:
点击云API获取连接“https://console.cloud.tencent.com/cam/capi”,登录腾讯云账号,显示如下:
添加描述
获取密钥
然后最后一个env代表的是云开发环境ID,那么这个就需要到另外一个地方来获取了.
https://console.cloud.tencent.com/tcb/env/index?rid=4,创建一个
添加描述
然后点击下一步
添加描述
然后你就会获得一个云开发环境ID,当然这个也是先用后付费.
把修改好的文件保存,并再次将它打包成zip格式.
添加描述
然后回到日志部署的控制台,然后将此zip包上传就好.
修改好之后点击部署,稍微等待一下即可
添加描述
添加描述
那么这个时候就已经部署好了,你只需要运行你的游戏,然后就会在cls中看到日志.具体的日志就是index.js中的那些方法中所需要生成的日志.
然后运行你的游戏
添加描述
如果你没有现成的游戏,你同样可以在腾讯云上找到一个完整的例子,这里给腾讯云点个赞,因为他们的努力,给我们省了不仅仅是一点的事.
那么具体的方法详见我的另外一个系列的文章:
https://cloud.tencent.com/developer/article/1809023,这是系列的第一篇,有需要的可以翻翻看.
等待大概30s-1分钟之后,会有日志信息:
添加描述
看,是不是超级自动化.这也和cls的介绍中说的一样,只需要点几下鼠标,即可完成部署.
enjoy it !