feat: add websocket server hybrid pool example
[poolifier.git] / examples / typescript / http-server-pool / fastify-cluster / src / worker.ts
1 import type { AddressInfo } from 'node:net'
2 import { ClusterWorker } from 'poolifier'
3 import Fastify from 'fastify'
4 import type { WorkerData, WorkerResponse } from './types.js'
5
6 const factorial: (n: number) => number = n => {
7 if (n === 0) {
8 return 1
9 }
10 return factorial(n - 1) * n
11 }
12
13 const startFastify = async (
14 workerData?: WorkerData
15 ): Promise<WorkerResponse> => {
16 const { port } = workerData as WorkerData
17 const fastify = Fastify({
18 logger: true
19 })
20
21 fastify.all('/api/echo', request => {
22 return request.body
23 })
24
25 fastify.get<{
26 Params: { number: number }
27 }>('/api/factorial/:number', request => {
28 const { number } = request.params
29 return { number: factorial(number) }
30 })
31
32 await fastify.listen({ port })
33 return {
34 status: true,
35 port: (fastify.server.address() as AddressInfo).port
36 }
37 }
38
39 class FastifyWorker extends ClusterWorker<WorkerData, WorkerResponse> {
40 public constructor () {
41 super(startFastify)
42 }
43 }
44
45 export const fastifyWorker = new FastifyWorker()