Skip to content

i_zh_可选配置

huangjizhong edited this page Nov 4, 2023 · 7 revisions

可选配置

rpc配置

app.setConfig(key: "rpc", value: I_rpcConfig);

interface I_rpcConfig {
    /**
     * 超时时间(秒,大于 5 则使用,默认 10)
     */
    "timeout"?: number,
    /**
     * 消息包最大长度(默认 10 MB)
     */
    "maxLen"?: number,
    /**
     * 消息发送频率(毫秒,大于 10 则启用,默认立即发送)
     */
    "interval"?: number | { "default": number, [serverType: string]: number }
    /**
     * 是否开启Nagle算法(默认不开启)
     */
    "noDelay"?: boolean,
    /**
     * 心跳(秒,大于 5 则使用,默认 60)
     */
    "heartbeat"?: number,
    /**
     * 重连间隔(秒,默认 2)
     */
    "reconnectDelay"?: number,
    /**
     * 不建立socket连接的矩阵
     */
    "noRpcMatrix"?: { [serverType: string]: string[] },
    /**
     * rpc 消息缓存长度(默认 5000)
     */
    "rpcMsgCacheCount"?: number,
    /**
     * 当开启 interval 时,为防止单次Buffer申请过大,可配置此值作为立即发送的阈值(默认 +Infinity)
     */
    "intervalCacheLen"?: number,
    /**
     * rpc调用发生错误时,记录堆栈(注意:会影响性能,建议开发模式开启,生产环境关闭。默认关闭。)
     */
    "errStack"?: boolean,
}
  • timeout为rpc调用时的超时时间。
  • interval为服务器间的socket消息发送频率,可针对服务器类型进行配置。
  • noRpcMatrix默认情况下每两个服务器之间都会建立socket连接。当两个服务器类型之间无需通信时,可以通过此配置阻止建立连接。

connector配置

app.setConfig(key: "connector", value: I_connectorConfig);

interface I_connectorConfig {
    /**
     * 自定义connector类(默认tcp)
     */
    "connector"?: I_connectorConstructor,
    /**
     * 心跳(秒,默认无)
     */
    "heartbeat"?: number,
    /**
     * 最大连接数(默认无上限)
     */
    "maxConnectionNum"?: number,
    /**
     * 消息包最大长度(默认 10 MB)
     */
    "maxLen"?: number
    /**
     * 是否开启Nagle算法(默认不开启)
     */
    "noDelay"?: boolean,
    /**
     * 消息发送频率(毫秒,大于 10 则启用,默认立即发送)
     */
    "interval"?: number,
    /**
     * 客户端连接通知
     */
    "clientOnCb"?: (session: Session) => void,
    /**
     * 客户端离开通知
     */
    "clientOffCb"?: (session: Session) => void,
    
    [key: string]: any,
}
  • connector前端服务器监听clientPort的连接服务,框架内置两种:tcpws(ws时,如果要使用 ssl 证书, 可以添加配置 {"ssl": true, "cert": cert, "key": key})。开发者还可以自定义连接服务。
  • clientOnCb客户端连接成功的回调
  • clientOffCb客户端断开连接的回调
  • cmdFilter消息过滤器,在protoDecode后被调用。可用于防止客户端消息发送过于频繁。

编码解码配置

app.setConfig(key: "encodeDecode", value: I_encodeDecodeConfig);

interface I_encodeDecodeConfig {
    /**
     * 协议编码
     */
    "protoEncode"?: (cmd: number, msg: any) => Buffer,
    /**
     * 消息编码
     */
    "msgEncode"?: (cmd: number, msg: any) => Buffer,
    /**
     * 协议解码
     */
    "protoDecode"?: (data: Buffer) => { "cmd": number, "msg": Buffer },
    /**
     * 消息解码
     */
    "msgDecode"?: (cmd: number, msg: Buffer) => any,
}
  • 客户端来的数据经过protoDecode解码出消息号cmd和具体的消息字节流msgmsg会被传到msgDecode解码出具体的消息内容。
  • 向客户端发消息时,protoEncode将消息号和具体的消息内容编码出字节流,该字节流被直接发送到客户端。所以msgEncode是被包含在protoEncode函数中的。
  • 可参考数据流向图

ssh配置

app.setConfig(key: "ssh", value: string[]);

  • master服启动其他物理机上的服务器时的ssh配置

认证密钥配置

app.setConfig(key: "recognizeToken", value: I_recognizeTokenConfig);

interface I_recognizeTokenConfig {
    /**
     * 服务器内部认证密钥
     */
    "serverToken"?: string,
    /**
     * master与cli的认证密钥
     */
    "cliToken"?: string,
}
  • serverToken是服务器间建立连接时的认证密钥,防止非法连接。
  • cliToken是mydog命令行与master服务器建立连接时的认证密钥,防止非法连接。

内部日志输出

setConfig(key: "logger", value: (level: "debug" | "info" | "error", msg: string) => void);

  • 框架内部会将相关日志通过此配置传给开发者。

自定义监控

app.setConfig(key: "mydogList", value: () => { "title": string, "value": string }[]);

  • mydog list时添加自定义显示的内容。

服务器关闭回调

setConfig(key: "onBeforeExit", value: (cb: () => void) => void): void;

  • 在收到mydog remove/removeT/stop命令时,会触发此回调。

接收 mydog send 发来的消息

setConfig(key: "onMydogSend", value: (args: string[], cb: (data: any) => void) => void): void;

  • 接收 mydog send发来的消息。