feat: add ws-cluster-pool example
[poolifier.git] / examples / typescript / websocket-server-pool / ws-cluster / src / main.ts
1 import { dirname, extname, join } from 'node:path'
2 import { fileURLToPath } from 'node:url'
3 import { FixedClusterPool, availableParallelism } from 'poolifier'
4 import { type WorkerData, type WorkerResponse } from './types.js'
5
6 const workerFile = join(
7 dirname(fileURLToPath(import.meta.url)),
8 `worker${extname(fileURLToPath(import.meta.url))}`
9 )
10
11 const pool = new FixedClusterPool<WorkerData, WorkerResponse>(
12 availableParallelism(),
13 workerFile,
14 {
15 errorHandler: (e: Error) => {
16 console.error(e)
17 }
18 }
19 )
20
21 // Start one ws server instance per cluster worker in the pool
22 for (let i = 1; i <= pool.info.maxSize; i++) {
23 pool
24 .execute({ port: 8080 })
25 .then(response => {
26 if (response.status) {
27 console.info(
28 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
29 `WebSocket server is listening on worker ${i} on port ${response.port}`
30 )
31 } else {
32 console.error(
33 `WebSocket server failed to start on worker ${i}:`,
34 response.error
35 )
36 }
37 return null
38 })
39 .catch(error => {
40 console.error(error)
41 })
42 }