labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
labels:
- 'dependencies'
- 'examples'
- - 'nocombine'
reviewers:
- 'pioardi'
- 'jerome-benoit'
## [Unreleased]
+### Added
+
+- HTTP server pool examples: express-cluster, express-hybrid.
+
## [2.6.27] - 2023-08-15
### Fixed
- Easy switch from a pool type to another :white_check_mark:
- No runtime dependencies :white_check_mark:
- Proper integration with Node.js [async_hooks](https://nodejs.org/api/async_hooks.html) :white_check_mark:
-- Support CommonJS, ESM, and TypeScript :white_check_mark:
+- Support for CommonJS, ESM, and TypeScript :white_check_mark:
- Support for [worker_threads](https://nodejs.org/api/worker_threads.html) and [cluster](https://nodejs.org/api/cluster.html) Node.js modules :white_check_mark:
-- Support multiple task functions :white_check_mark:
-- Support sync and async task functions :white_check_mark:
+- Support for multiple task functions :white_check_mark:
+- Support for sync and async task functions :white_check_mark:
- Tasks distribution strategies :white_check_mark:
- General guidelines on pool choice :white_check_mark:
- Error handling out of the box :white_check_mark:
You can do the same with the classes _ClusterWorker_, _FixedClusterPool_ and _DynamicClusterPool_.
-**See [examples](./examples/) folder for more details**:
+**See [examples](./examples/) for more details**:
- [Javascript](./examples/javascript/)
- [Typescript](./examples/typescript/)
private static readonly startExpress = (
workerData?: ClusterWorkerData
): ClusterWorkerResponse => {
- const { port, workerFile, minWorkers, maxWorkers } =
+ const { port, workerFile, minWorkers, maxWorkers, ...poolOptions } =
workerData as ClusterWorkerData
ExpressWorker.requestHandlerPool = new DynamicThreadPool<
minWorkers ?? 1,
maxWorkers ?? availableParallelism(),
workerFile,
- workerData
+ poolOptions
)
const application: Express = express()
},
...options
}
+ const { workerFile, minWorkers, maxWorkers, ...poolOptions } = options
const pool = new DynamicThreadPool<ThreadWorkerData, ThreadWorkerResponse>(
- options.minWorkers as number,
- options.maxWorkers as number,
- options.workerFile,
- options
+ minWorkers as number,
+ maxWorkers as number,
+ workerFile,
+ poolOptions
)
if (!fastify.hasDecorator('pool')) {
fastify.decorate('pool', pool)
private static readonly startFastify = async (
workerData?: ClusterWorkerData
): Promise<ClusterWorkerResponse> => {
- const { port } = workerData as ClusterWorkerData
+ const { port, ...fastifyPoolifierOptions } = workerData as ClusterWorkerData
FastifyWorker.fastify = Fastify({
logger: true
})
- await FastifyWorker.fastify.register(fastifyPoolifier, workerData)
+ await FastifyWorker.fastify.register(
+ fastifyPoolifier,
+ fastifyPoolifierOptions
+ )
FastifyWorker.fastify.all('/api/echo', async (request) => {
return (
},
...options
}
+ const { workerFile, minWorkers, maxWorkers, ...poolOptions } = options
const pool = new DynamicThreadPool<WorkerData, WorkerResponse>(
- options.minWorkers as number,
- options.maxWorkers as number,
- options.workerFile,
- options
+ minWorkers as number,
+ maxWorkers as number,
+ workerFile,
+ poolOptions
)
if (!fastify.hasDecorator('pool')) {
fastify.decorate('pool', pool)
workerData?: WorkerData
): WorkerResponse => {
const { port } = workerData as WorkerData
+
WebSocketServerWorker.wss = new WebSocketServer({ port }, () => {
console.info(
`⚡️[ws server]: WebSocket server is started in cluster worker at ws://localhost:${port}/`
private static readonly startWebSocketServer = (
workerData?: ClusterWorkerData
): ClusterWorkerResponse => {
- const { port, workerFile, minWorkers, maxWorkers } =
+ const { port, workerFile, minWorkers, maxWorkers, ...poolOptions } =
workerData as ClusterWorkerData
WebSocketServerWorker.requestHandlerPool = new DynamicThreadPool<
minWorkers ?? 1,
maxWorkers ?? availableParallelism(),
workerFile,
- workerData
+ poolOptions
)
WebSocketServerWorker.wss = new WebSocketServer({ port }, () => {
"author": "",
"license": "ISC",
"dependencies": {
- "poolifier": "^2.6.26",
+ "poolifier": "^2.6.27",
"ws": "^8.13.0"
},
"devDependencies": {
dependencies:
poolifier:
- specifier: ^2.6.26
- version: 2.6.26
+ specifier: ^2.6.27
+ version: 2.6.27
ws:
specifier: ^8.13.0
version: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3)
requiresBuild: true
dev: false
- /poolifier@2.6.26:
- resolution: {integrity: sha512-cfcP3oCwtxG5DzxLXicUQjr6ieJzX/5/yT2Nt0tBByhufqtu6V2Son7kJXSHlWrNa08Y39cOaeNrOLCazoJ07w==}
+ /poolifier@2.6.27:
+ resolution: {integrity: sha512-lpB1KXar4d915E2KzsO8IT9tLhonqmLAo+MSL2evF/oYZZg0KZWFXaeupQhS4qvNudDC0M51Lg6J1rquUrBiHw==}
engines: {node: '>=16.14.0', pnpm: '>=8.6.0'}
requiresBuild: true
dev: false