-
Notifications
You must be signed in to change notification settings - Fork 80
i_zh_自定义connector
huangjizhong edited this page Nov 17, 2022
·
2 revisions
/**
* 自定义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;
}
- 创建一个类,构造参数与
I_connectorConstructor
保持一致,主要用来监听clientPort
端口,等待客户端连接。其中clientManager
是框架内部的一个类,开放了三个接口。config
是我们的connector配置。startCb
回调请在监听clientPort
端口成功后调用。 - 当一个新的客户端连接后,我们将对应的socket构造成一个类,该类需要实现
I_clientSocket
接口,等待客户端握手,握手成功则在回应里我们需要将一些重要参数返回给客户端,如routeConfig
消息列表,心跳时长等等,同时我们调用I_clientManager
的addClient
方法将该socket注册到框架内部。后续收到消息后(一个完整包
)调用handleMsg
方法进行处理,会陆续调用protoDecode
、msgDecode
等。当socket关闭后,我们需要调用removeClient
方法,将该socket从框架内部移除。 - 可以参考框架内部的两个个connector。