网络知识 娱乐 【日志服务CLS】腾讯云游戏对战引擎 MGOBE接入CLS

【日志服务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 !