b489415ffd798a7ed404e5b993d5e7556278f5dd
1 import { ClusterWorker
} from
'poolifier'
2 import { type RawData
, WebSocketServer
} from
'ws'
11 const factorial
: (n
: number) => number = n
=> {
15 return factorial(n
- 1) * n
18 const startWebSocketServer
= (workerData
?: WorkerData
): WorkerResponse
=> {
19 const { port
} = workerData
as WorkerData
20 const wss
= new WebSocketServer({ port
}, () => {
22 `⚡️[ws server]: WebSocket server is started on 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
:
37 type: MessageType
.echo
,
42 case MessageType
.factorial
:
45 type: MessageType
.factorial
,
46 data
: { number: factorial(data
.number as number) }
55 port
: wss
.options
.port
59 class WebSocketServerWorker
extends ClusterWorker
<WorkerData
, WorkerResponse
> {
60 public constructor () {
61 super(startWebSocketServer
)
65 export const webSocketServerWorker
= new WebSocketServerWorker()