UNPKG

mihawk

Version:

A tiny & simple mock server tool, support json,js,cjs,ts(typescript).

89 lines (88 loc) 2.62 kB
/// <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>; }