Skip to content

i_zh_自定义connector

huangjizhong edited this page Nov 17, 2022 · 2 revisions

自定义 connector

/**
 * 自定义connector类
 */
export interface I_connectorConstructor {
    new(info: { app: Application, clientManager: I_clientManager, config: I_connectorConfig, startCb: () => void }): void;
}

/**
 * 用户socket管理
 */
export interface I_clientManager {
    /** 
     * 将客户端注册到框架中 
     */
    addClient(client: I_clientSocket): void;
    /**
     * 处理客户端消息
     */
    handleMsg(client: I_clientSocket, msg: Buffer): void;
    /**
     * 从框架中移除该客户端
     */
    removeClient(client: I_clientSocket): void;
}

/**
 * 用户socket
 */
export interface I_clientSocket {
    /**
     * session (注:框架内部赋值)
     */
    readonly session: Session;

    /**
     * ip(session是从这里拿到的ip)
     */
    remoteAddress: string;

    /**
     * 发送消息
     */
    send(msg: Buffer): void;

    /**
     * 关闭
     */
    close(): void;
}
  1. 创建一个类,构造参数与I_connectorConstructor保持一致,主要用来监听clientPort端口,等待客户端连接。其中clientManager是框架内部的一个类,开放了三个接口。config是我们的connector配置。startCb回调请在监听clientPort端口成功后调用。
  2. 当一个新的客户端连接后,我们将对应的socket构造成一个类,该类需要实现I_clientSocket接口,等待客户端握手,握手成功则在回应里我们需要将一些重要参数返回给客户端,如routeConfig消息列表,心跳时长等等,同时我们调用I_clientManageraddClient方法将该socket注册到框架内部。后续收到消息后(一个完整包)调用handleMsg方法进行处理,会陆续调用protoDecodemsgDecode等。当socket关闭后,我们需要调用removeClient方法,将该socket从框架内部移除。
  3. 可以参考框架内部的两个个connector。