Giter Site home page Giter Site logo

fastify-delay-request's Introduction

fastify-delay-request

Continuous Integration Package Manager CI NPM version GitHub package.json version GitHub

This plugin is used for delaying response to a request while you would like the server to spin-up first and wait some heavy task.

Install

npm install fastify-delay-request --save

yarn add fastify-delay-request

Usage

import FastifyDelayRequest from 'fastify-delay-request'
import * as path from 'path'
import { setTimeout } from 'timers/promises'

fastify.register(FastifyDelayRequest, {
})

fastify.delay.addTask(async function() {
  // do some heavy task here
  await setTimeout(10000)
})

Options

options.concurreny

Maximum number of tasks run in parallel. Default: 1

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  concurreny: 1
})

options.taskTimeout

Maximum millseconds that allow the task to run. It can ensure the server should not wait forever. Default: 60000 (1 min)

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  taskTimeout: 120000
})

options.maxTimeout

Maximum timeout for each delayed request.

Default: 180000 (3 mins)

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  maxTimeout: 240000
})

options.maxRequest

Maximum requests that holds while waiting all tasks finished. You must specify a limited number, otherwise you may face TCP Port Exhaustaion attack or memory-leak.

Default: 100

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  maxRequest: 100
})

options.checkInterval

The interval checks for task finish. Default: 1000 (1s)

import Fastifybree from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  checkInterval: 1000
})

options.onReachLimit

The function that used to return error when maximum request or maximum timeout reached.

You must reply in this handler, otherwise you may by-pass the delay action and reach handler.

import FastifyDelayRequest from 'fastify-delay-request'

fastify.register(FastifyDelayRequest, {
  onReachLimit(request, reply) {
    return reply
      .code(503)
      .header('Retry-After', '240000')
      .send({
        success: false,
        code: 503,
        message: 'Service Unavailable'
      })
  }
})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.