mydog概览

2020-11-21  本文已影响0人  FWahuang

mydog传送门

概述

master服务器

master服务器(即master.ts)读取配置文件,启动所配置的服务器集群,并对所有服务器进行管理。逻辑服务器启动后向master注册,通过master认识其他逻辑服。

逻辑服务器

逻辑服务器(即servers.ts)是开发者编写代码的服务器集群。其中 frontend(需同时提供clientPort) 参数表示该服务器是客户端可连接的,即前端服务器,俗称网关。而没有该参数的服务器即后端服务器,是处理游戏逻辑(如场景服务)的,不允许客户端连接。

项目目录结构

项目目录结构

可选配置


app.setConfig("connector", { "connector": connector.connectorTcp, "heartbeat": 6, "maxConnectionNum": 2000, "maxLen": 10 * 1024 * 1024, "clientOnCb": clientOnCb, "clientOffCb": clientOffCb })

此配置针对clientPort。connector为客户端直连的socket类(框架内部提供ws和tcp两种,默认tcp。开发者可替换为自己的socket。)。heartbeat为心跳间隔。maxConnectionNum为最大连接数。maxLen为单个消息包最大长度。clientOnCb为客户端连接通知,clientOffCb为客户端离开通知。


app.setConfig("rpc", {"timeout": 5, "maxLen": 10 * 1024 * 1024, "interval": 20})

此配置针对port。timeout为rpc超时时间。maxLen为单个消息包最大长度。interval为消息发送频率(毫秒),高于10则启用,默认不开启即立即发送。


app.setConfig("encodeDecode", { "protoDecode": protoDecode, "protoEncode": protoEncode, "msgDecode": msgDecode, "msgEncode": msgEncode })。

此配置是服务器与客户端的通信协议及编解码协议。客户端单个消息包到达后,会调用protoDecode函数,此函数返回cmdId(整数类型)和msg(Buffer类型)两个参数,其中cmdId为消息序号(即在route.ts中的数组下标),如果此消息是前端服的,则调用msgDecode,并执行对应消息接口。如果此消息是后端服的,则拷贝session一起编码后转发至对应后端服,到达后再调用msgDecode,并执行对应消息接口。当服务器发送消息给客户端时,会调用protoEncode函数进行编码。

路由


app.route("chat", function (session: Session) {

    return session.get("chatServerId");

});


app.rpc("chat-server-1").chat....

"chat-server-1"即接收消息的服务器id。当为"*"时,为发送给所有chat类服务器 , 注意:此时回调接收的数据结构有所改变。rpc调用有完整的代码提示,非常方便,如下图:

rpc代码提示

Session类

session中存着两个重要字段,uid和sid,sid是前端服务器的名字,uid是socket连接绑定的唯一标识,服务器推送消息时,依据这两个字段。前端服务器中调用bind方法,绑定唯一uid,session中可通过set()get()方法存储自定义信息。后端服务器中的session是前端服务器在每次转发消息时对前端session的复制,后端自定义存储后必须调用apply()方法,才能转存到前端服务器,或者rpc到前端服调用app.applySession()方法。 注意:session在调用set时会触发内部将session转为Buffer的操作,如果get某值并修改后没有重新set,则此修改不能反映在后端服。

数据流向图

数据流向图

mydog命令行

  1. mydog init 初始化项目

  2. mydog start 启动服务器

  3. mydog list 服务器监控

  4. mydog stop 关闭服务器

  5. mydog remove 关闭部分服务器

  6. mydog removeT 关闭部分服务器类型

  7. mydog cmd 根据route.ts生成对应消息号文件


mydog start -d -e env [id1 id2 ...]

-d表示后台运行,-e env为设置环境,即选用server.ts里对应配置。id1 id2表示启动的服务器id,不传则全部启动。


mydog list -h host -p port -t cliToken -i 5

mydog 监控控制台。 -h为master服务器host,-p为master服务器端口号,-t为密钥, -i为监控数据间隔。开发者可自定义数据,如下


app.setConfig("mydogList", () => {

    return [{ "title": "cpu(%)", "value": getCpuUsage() }];

});

监控图

mydog stop

关闭所有服务器。


mydog remove id1 [id2 ...]

关闭 id1和id2服务器


mydog removeT serverType1 [serverType2 ...]

关闭 serverType1 和serverType2 类型的服务器

在项目src目录执行该命令,会根据config/sys/route.ts文件生成对应消息号config/cmd.ts。服务器给客户端主动发消息时,使用此文件中的消息名。

其他

1、qq群:875459630

2、mydog源码视频讲解

3、聊天工程源码 ------ 在线体验

4、斗地主源码 ------ 在线体验

上一篇 下一篇

猜你喜欢

热点阅读