mihawk
Version:
A tiny & simple mock server tool, support json,js,cjs,ts(typescript).
89 lines (88 loc) • 2.62 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
import https from 'https';
import http from 'http';
import * as WS from 'ws';
import type { SocketResolveFunc } from '../com-types';
/**
* 构造器传参
*/
export interface WsCtrlOptions {
/**
* ws-server 配置
* @required
*/
server: https.Server | http.Server;
/**
* 监听地址
*/
host: string;
/**
* 监听端口
*/
port: number;
/**
* 是否使用 https 协议
*/
secure: boolean;
/**
* 消息体数据,是否使用 stomp 协议,默认为 false
*/
stomp?: boolean;
/**
* 自定义 socket 逻辑处理函数
* @param {WS.WebSocket} socket
* @param {IncomingMessage} request
* @returns
*/
resolve?: SocketResolveFunc;
}
/**
* websocket 服务端相关操作的二次封装,class 类
*/
export default class WsCtrl {
private _useStompMsg;
private _host;
private _port;
private _secure;
private _baseServer?;
private _wsSvr?;
private _clientIndex;
private _resolveFunc;
/**
* new 操作构造器
*/
constructor(options: WsCtrlOptions);
/**
* 创建一个 client ID
* @returns {string}
*/
private _autoCreateClientId;
/**
* start 函数
*/
start(server?: WS.ServerOptions['server'], isRestart?: boolean): Promise<void>;
/**
* 关闭/强行关闭 WebSocket 服务器
* - 注意:这里并不会对其 baseServer 进行关闭,只是关闭了 WebSocket 服务器(baseServer的关闭和销毁操作放到另外的地方)
* @param {boolean} forceClose 是否强制关闭
*/
_close(forceClose?: boolean): Promise<void>;
/**
* close 函数
* 关闭一个已经打开的套接字连接。它会尝试优雅地关闭连接,确保所有已发送的数据都被接收方接收
* - 发送一个 FIN 包给对方,表示本端不再发送数据。
* - 允许接收来自对端的数据,直到对端也关闭连接。
* - 关闭连接后,会触发 wsSvr 的 close 事件
*/
close(): Promise<void>;
/**
* destory 函数
* 强行/强制的关闭一个打开的套接字,并释放所有相关资源,且不考虑进行正常的关闭握手过程
* - 立即关闭连接,不等待未发送的数据被发送或接收
* - 释放所有与套接字关联的资源
* - 关闭连接后,会触发 wsSvr 的 close 事件
* - 如果有未处理的错误,可能会触发 wsSvr 的 error 事件
*/
destory(): Promise<void>;
}