X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=examples%2Ftypescript%2Fwebsocket-server-pool%2Fws-hybrid%2Fsrc%2Fwebsocket-server-worker.ts;h=72ac2a1baef359eb635543a2e7ac68dcb080e832;hb=HEAD;hp=e52f0c06c9331ee011b17b75c8724974c8329a3b;hpb=66f0c14c082ad6013dd1ca8e2a45a61c8295bc23;p=poolifier.git diff --git a/examples/typescript/websocket-server-pool/ws-hybrid/src/websocket-server-worker.ts b/examples/typescript/websocket-server-pool/ws-hybrid/src/websocket-server-worker.ts index e52f0c06c..86a0c8f8d 100644 --- a/examples/typescript/websocket-server-pool/ws-hybrid/src/websocket-server-worker.ts +++ b/examples/typescript/websocket-server-pool/ws-hybrid/src/websocket-server-worker.ts @@ -1,7 +1,7 @@ import { availableParallelism, ClusterWorker, - DynamicThreadPool + DynamicThreadPool, } from 'poolifier' import { type RawData, WebSocketServer } from 'ws' @@ -12,7 +12,7 @@ import { type MessagePayload, MessageType, type ThreadWorkerData, - type ThreadWorkerResponse + type ThreadWorkerResponse, } from './types.js' const emptyFunction = (): void => { @@ -20,24 +20,35 @@ const emptyFunction = (): void => { } class WebSocketServerWorker extends ClusterWorker< -ClusterWorkerData, -ClusterWorkerResponse + ClusterWorkerData, + ClusterWorkerResponse > { - private static wss: WebSocketServer private static requestHandlerPool: DynamicThreadPool< - ThreadWorkerData, - ThreadWorkerResponse + ThreadWorkerData, + ThreadWorkerResponse > + private static wss: WebSocketServer + + public constructor () { + super(WebSocketServerWorker.startWebSocketServer, { + killHandler: async () => { + await WebSocketServerWorker.requestHandlerPool.destroy() + WebSocketServerWorker.wss.close() + }, + }) + } + private static readonly startWebSocketServer = ( workerData?: ClusterWorkerData ): ClusterWorkerResponse => { - const { port, workerFile, minWorkers, maxWorkers, ...poolOptions } = + const { maxWorkers, minWorkers, port, workerFile, ...poolOptions } = + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion workerData! WebSocketServerWorker.requestHandlerPool = new DynamicThreadPool< - ThreadWorkerData, - ThreadWorkerResponse + ThreadWorkerData, + ThreadWorkerResponse >( minWorkers ?? 1, maxWorkers ?? availableParallelism(), @@ -47,15 +58,14 @@ ClusterWorkerResponse WebSocketServerWorker.wss = new WebSocketServer({ port }, () => { console.info( - `⚡️[ws server]: WebSocket server is started in cluster worker at ws://localhost:${port}/` + `⚡️[ws server]: WebSocket server is started in cluster worker at ws://localhost:${port.toString()}/` ) }) WebSocketServerWorker.wss.on('connection', ws => { ws.on('error', console.error) ws.on('message', (message: RawData) => { - const { type, data } = JSON.parse( - // eslint-disable-next-line @typescript-eslint/no-base-to-string + const { data, type } = JSON.parse( message.toString() ) as MessagePayload switch (type) { @@ -65,8 +75,8 @@ ClusterWorkerResponse .then(response => { ws.send( JSON.stringify({ + data: response.data, type: MessageType.echo, - data: response.data }) ) return undefined @@ -80,10 +90,11 @@ ClusterWorkerResponse ws.send( JSON.stringify( { + data: response.data, type: MessageType.factorial, - data: response.data }, - (_, v) => (typeof v === 'bigint' ? v.toString() : v) + (_, v: unknown) => + typeof v === 'bigint' ? v.toString() : v ) ) return undefined @@ -94,19 +105,10 @@ ClusterWorkerResponse }) }) return { + port: WebSocketServerWorker.wss.options.port, status: true, - port: WebSocketServerWorker.wss.options.port } } - - public constructor () { - super(WebSocketServerWorker.startWebSocketServer, { - killHandler: async () => { - await WebSocketServerWorker.requestHandlerPool.destroy() - WebSocketServerWorker.wss.close() - } - }) - } } export const webSocketServerWorker = new WebSocketServerWorker()