9ec81eb5db8b8c8fc5b7b5d4ad94d522629df89c
1 import { ClusterWorker
} from
'poolifier'
2 import { type RawData
, WebSocketServer
} from
'ws'
12 class WebSocketServerWorker
extends ClusterWorker
<WorkerData
, WorkerResponse
> {
13 private static wss
: WebSocketServer
15 private static readonly factorial
= (n
: number): number => {
19 return WebSocketServerWorker
.factorial(n
- 1) * n
22 private static readonly startWebSocketServer
= (
23 workerData
?: WorkerData
24 ): WorkerResponse
=> {
25 const { port
} = workerData
!
27 WebSocketServerWorker
.wss
= new WebSocketServer({ port
}, () => {
29 `⚡️[ws server]: WebSocket server is started in cluster worker at ws://localhost:${port}/`
33 WebSocketServerWorker
.wss
.on('connection', ws
=> {
34 ws
.on('error', console
.error
)
35 ws
.on('message', (message
: RawData
) => {
36 const { type, data
} = JSON
.parse(
37 // eslint-disable-next-line @typescript-eslint/no-base-to-string
39 ) as MessagePayload
<DataPayload
>
41 case MessageType
.echo
:
44 type: MessageType
.echo
,
49 case MessageType
.factorial
:
52 type: MessageType
.factorial
,
54 number: WebSocketServerWorker
.factorial(data
.number!)
64 port
: WebSocketServerWorker
.wss
.options
.port
68 public constructor () {
69 super(WebSocketServerWorker
.startWebSocketServer
, {
71 WebSocketServerWorker
.wss
.close()
77 export const webSocketServerWorker
= new WebSocketServerWorker()