mydog传送门
master服务器(即master.ts
)读取配置文件,启动所配置的服务器集群,并对所有服务器进行管理。逻辑服务器启动后向master注册,通过master认识其他逻辑服。
逻辑服务器(即servers.ts
)是开发者编写代码的服务器集群。其中 frontend(需同时提供clientPort) 参数表示该服务器是客户端可连接的,即前端服务器,俗称网关。而没有该参数的服务器即后端服务器,是处理游戏逻辑(如场景服务)的,不允许客户端连接。
基本配置文件在config/sys
目录下。master.ts
为master服务器端口配置,servers.ts
为开发者自定义的服务器配置,route.ts
为通信消息列表。
servers
目录为通信消息入口。如 chat 表示聊天服务器,handler
目录下接收客户端消息,remote
目录下接收服务器之间的rpc调用消息。客户端发送chat.main.chat
消息,服务器将会在chat/handler目录下main.ts文件中的chat方法处收到消息。开发者调用 app.rpc("chat-server-1").chat.main.offline()
,将会在chat/remote目录下的main.ts文件里的offline方法中收到消息。 注意:rpc调用如果传入了回调,则接收处必须调用回调,否则会触发超时。
app.ts
为程序入口文件
主动发送消息:1、前端服使用app.sendMsgByUid()
,app.sendAll()
。2、后端服使用app.sendMsgByUidSid()
,app.sendMsgByGroup()
。
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");
});
// 回调形式
this.app.rpc("connector-server-1").connector.main.test(msg, (err:rpcErr, res) => {
});
// await 形式
let res = await this.app.rpcAwait("connector-server-1").connector.main.test(msg);
“connector-server-1"即接收消息的服务器id。当为”*"时,为发送给所有chat类服务器 , 注意:此时回调接收的数据结构有所改变。 rpc调用有完整的代码提示,非常方便,如下图:
session中存着两个重要字段,uid和sid,sid是前端服务器的名字,uid是socket连接绑定的唯一标识,服务器推送消息时,依据这两个字段。前端服务器中调用bind方法,绑定唯一uid,session中可通过set()
和get()
方法存储自定义信息。后端服务器中的session是前端服务器在每次转发消息时对前端session的复制,后端自定义存储后必须调用apply()
方法,才能转存到前端服务器,或者rpc到前端服调用app.applySession()
方法。 注意:session在调用set时会触发内部将session转为Buffer的操作,如果get某值并修改后没有重新set,则此修改不能反映在后端服。
mydog init
初始化项目mydog start
启动服务器mydog list
服务器监控mydog stop
关闭服务器mydog remove
关闭部分服务器mydog removeT
关闭部分服务器类型mydog cmd
根据route.ts生成对应消息号文件mydog start
mydog start -d -e env [id1 id2 ...]
-d表示后台运行,-e env为设置环境,即选用server.ts里对应配置。id1 id2表示启动的服务器id,不传则全部启动。
mydog list
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 stop
关闭所有服务器。
mydog remove
mydog remove id1 [id2 ...]
关闭 id1和id2服务器
mydog removeT
mydog removeT serverType1 [serverType2 ...]
关闭 serverType1 和serverType2 类型的服务器
mydog cmd
1、qq群:875459630