1 import { ClusterWorker
} from
'poolifier'
2 import { type RawData
, WebSocketServer
} from
'ws'
4 type ClusterWorkerData
,
5 type ClusterWorkerResponse
,
10 import { requestHandlerPool
} from
'./request-handler-pool.js'
12 const emptyFunction
= (): void => {
16 const startWebSocketServer
= (
17 workerData
?: ClusterWorkerData
18 ): ClusterWorkerResponse
=> {
19 const { port
} = workerData
as ClusterWorkerData
20 const wss
= new WebSocketServer({ port
}, () => {
22 `⚡️[ws server]: WebSocket server is started on cluster worker at ws://localhost:${port}/`
26 wss
.on('connection', ws
=> {
27 ws
.on('error', console
.error
)
28 ws
.on('message', (message
: RawData
) => {
29 const { type, data
} = JSON
.parse(
30 // eslint-disable-next-line @typescript-eslint/no-base-to-string
32 ) as MessagePayload
<DataPayload
>
34 case MessageType
.echo
:
36 .execute({ data
}, 'echo')
40 type: MessageType
.echo
,
48 case MessageType
.factorial
:
50 .execute({ data
}, 'factorial')
54 type: MessageType
.factorial
,
67 port
: wss
.options
.port
71 class WebSocketServerWorker
extends ClusterWorker
<
75 public constructor () {
76 super(startWebSocketServer
)
80 export const webSocketServerWorker
= new WebSocketServerWorker()