lil-http-terminator, HTTP 서버를 정상적으로 종료하는 작은 JS 모듈
8467 단어 npmjavascriptnode
node_modules
를 11KB 늘리십시오.또는 2.2MB 모듈을 11KB로 축소한 방법.
TL;DR:
npm i lil-http-terminator
문제
저는 거의 10년 동안 node.js 마이크로서비스를 코딩해 왔습니다. 정상적인 HTTP 서버 종료는 항상 해결하기 어렵기 때문에 처리하고 싶지 않은 문제였습니다.
해결책
http-터미네이터 npm 모듈
최근에 나는 단계적 종료의 완벽한 구현이 있다는 것을 발견했습니다. http-terminator 이라고 합니다. 내가 그것을 사용하기로 결정한 이유는 다음과 같습니다(저자 인용).
- it does not monkey-patch Node.js API
- it immediately destroys all sockets without an attached HTTP request
- it allows graceful timeout to sockets with ongoing HTTP requests
- it properly handles HTTPS connections
- it informs connections using keep-alive that server is shutting down by setting a
connection: close
header- it does not terminate the Node.js process
용법:
import { createHttpTerminator } from 'http-terminator';
const httpTerminator = createHttpTerminator({ server });
await httpTerminator.terminate();
모든 node.js HTTP 서버(Express.js, Nest.js, Polka.js, Koa.js, Meteor.js, Sails.js, Hapi.js 등)에서 작동합니다.
우와! 빛나는 엔지니어링! 작가님 수고하셨습니다!
하지만 함정이 있습니다.
4KB 코드베이스에 불과하므로
node_modules
에 22개의 종속성(2.2MB, 464개 파일)을 추가합니다.직접 참조:
$ npx howfat -r tree http-terminator
npx: installed 18 in 1.695s
[email protected] (22 deps, 2.16mb, 464 files)
├── [email protected] (10.91kb, 5 files)
├─┬ [email protected] (19 deps, 2.02mb, 398 files)
│ ├── [email protected] (7.9kb, 10 files)
│ ├── [email protected] (2.7kb, 6 files)
│ ├─┬ [email protected] (9 deps, 1.79mb, 268 files)
│ │ ├─┬ [email protected] (5 deps, 1.41mb, 181 files)
│ │ │ ├── [email protected] (12.66kb, 11 files)
│ │ │ ├── [email protected] (16.56kb, 18 files)
│ │ │ ├── [email protected] (19.11kb, 9 files)
│ │ │ ╰─┬ [email protected] (1 dep, 490.54kb, 51 files)
│ │ │ ╰── [email protected] (31.67kb, 5 files)
│ │ ├── [email protected] (29.39kb, 9 files)
│ │ ├── [email protected] (23.48kb, 9 files)
│ │ ╰── [email protected] (10.73kb, 5 files)
│ ├─┬ [email protected] (1 dep, 34.32kb, 26 files)
│ │ ╰── [email protected] (🔗, 7.9kb, 10 files)
│ ├─┬ [email protected] (2 deps, 114.41kb, 41 files)
│ │ ╰─┬ [email protected] (1 dep, 48.41kb, 21 files)
│ │ ╰── [email protected] (25.92kb, 11 files)
│ ├── [email protected] (5.89kb, 8 files)
│ ├── [email protected] (12.42kb, 9 files)
│ ╰── [email protected] (3.96kb, 8 files)
╰── [email protected] (108kb, 42 files)
궁금해졌다. 그
roarr
패키지는 무엇이며 패키지에서 제거할 수 있다면 무엇입니까? 대답은 나를 놀라게 했다.불필요한 종속성 제거
세 가지 최상위 종속성을 쉽게 제거할 수 있습니다.
유형 축제
type-fest
는 패키지를 TS에서 JS로 다시 작성하여 제거할 수 있습니다. 아직 "부끄럽다"고 말하는 것을 보류하십시오.단일 기능 모듈입니다. 하나의 기능에만 코드 완성이 필요하지 않습니다. 따라서 JS로 다시 작성하는 것이 TypeScript 지지자에게 단점이 되어서는 안 됩니다.
지연
delay
모듈은 한 줄 함수로 다시 작성할 수 있습니다. 여기있어:const delay = time => new Promise(r => setTimeout(r, time));
포효
roarr
트리에서 가장 큰 모듈은 2MB의 하드 드라이브를 사용합니다. 하지만 말 그대로 한줄에 쓰입니다!!!if (terminating) {
log.warn('already terminating HTTP server');
return terminating;
}
모듈은 HTTP 서버를 두 번 종료하기로 결정한 경우 해당 경고를 인쇄합니다. 그게 다야. 전체
roarr
모듈 내에서 http-terminator
로거를 더 이상 사용하지 않습니다.실수로
.termiate()
를 두 번 호출하는 것은 거의 불가능합니다. 이런 일이 일어난다는 것은 상상하기 어렵습니다. 그래서 log
변수를 options
에 넣고 기본적으로 console
에 할당하기로 했습니다.우리는 20개의 종속성을 제거하고 동시에 동료 개발자가 원하는 로거(
winston
, bunyan
, pino
, morgan
등 또는 roarr
그 자체).lil-http-terminator를 만나보세요
http-terminator
를 lil-http-terminator
으로 갈랐습니다.const HttpTerminator = require("lil-http-terminator");
const httpTerminator = HttpTerminator({ server });
await httpTerminator.terminate();
원본만큼 멋진
lil-
버전은 다음과 같습니다.뒷말
저는 약 20년 동안 돈을 위해 코드를 작성하고 있습니다. 저는 거의 10년 동안 node.js와 npm을 사용하고 있습니다. 훌륭하고 강력한 node.js 서비스, 스크립트, 서버리스 기능, 앱을 개발하는 방법을 배웠습니다. 우리가 더 잘 따르는 모범 사례를 발견(재발명)했습니다. 코드를 작성한 후 몇 년 동안 유지 관리할 수 있도록 만드는 방법을 알고 있습니다. 가장 어려운 부분은 항상 타사 종속성이었습니다. 하위 종속성이 추가될 때마다 회사에 수천 달러의 비용이 들 수 있다는 것을 어렵게 배웠습니다.
2시간만에 포크해서 썼습니다
lil-http-terminator
. 이런 식으로 8시간에서 80시간을 절약할 수 있을 것으로 예상합니다. 똑같이 저장할 수 있습니다.
Reference
이 문제에 관하여(lil-http-terminator, HTTP 서버를 정상적으로 종료하는 작은 JS 모듈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koresar/lil-http-terminator-a-tiny-js-module-to-gracefully-shutdown-your-http-server-l0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)