{"id":13432454,"url":"https://github.com/iefserge/eshttp","last_synced_at":"2025-04-10T01:21:25.197Z","repository":{"id":57227583,"uuid":"40085989","full_name":"iefserge/eshttp","owner":"iefserge","description":"Portable pure JavaScript ES6/2015 HTTP library","archived":false,"fork":false,"pushed_at":"2016-07-12T08:46:38.000Z","size":66,"stargazers_count":74,"open_issues_count":7,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-24T10:15:56.042Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iefserge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-02T16:48:46.000Z","updated_at":"2023-05-25T12:24:33.000Z","dependencies_parsed_at":"2022-09-12T17:00:25.867Z","dependency_job_id":null,"html_url":"https://github.com/iefserge/eshttp","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iefserge%2Feshttp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iefserge%2Feshttp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iefserge%2Feshttp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iefserge%2Feshttp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iefserge","download_url":"https://codeload.github.com/iefserge/eshttp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248138236,"owners_count":21053837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T02:01:11.830Z","updated_at":"2025-04-10T01:21:25.174Z","avatar_url":"https://github.com/iefserge.png","language":"JavaScript","readme":"## eshttp\n\n[![Build Status](https://travis-ci.org/iefserge/eshttp.svg?branch=master)](https://travis-ci.org/iefserge/eshttp)\n\nPortable pure JavaScript ES6 HTTP library. Includes fast streaming regex-free parser for HTTP/1.0 and HTTP/1.1.\n\n- pure JavaScript (ES6/2015)\n- high-performance and low-level, no stream abstractions\n- portable, multiple backends support (Node.js/other platforms)\n\n## USAGE\n\n```bash\nnpm install eshttp\n```\n\nRequires ES6/2015 JS engine (Node.js 4.0). Example web server using eshttp:\n\n```js\n'use strict';\nconst eshttp = require('eshttp');\nconst server = new eshttp.HttpServer();\nconst response = new eshttp.HttpResponse(200, { 'x-header': 'value' }, 'hello');\n\nserver.onrequest = request =\u003e {\n  request.respondWith(response);\n};\n\nserver.listen(8080);\n```\n\n## TODO\n\n- parser improvements\n- chunked responses\n- fetch api\n\n## BENCHMARK\n\n```\n$ node -v\nv4.2.1\n```\n\n[Node.js builtin http module](https://github.com/iefserge/eshttp/blob/master/example/run-server-http.js):\n\n```\n$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/\nRunning 30s test @ http://127.0.0.1:8080/\n  12 threads and 400 connections\n  Thread Stats   Avg      Stdev     Max   +/- Stdev\n    Latency    21.12ms    2.32ms  98.16ms   88.23%\n    Req/Sec     1.25k   489.35     4.03k    83.52%\n  336337 requests in 30.09s, 38.81MB read\n  Socket errors: connect 155, read 181, write 0, timeout 0\nRequests/sec:  11177.42\nTransfer/sec:      1.29MB\n```\n\n[eshttp](https://github.com/iefserge/eshttp/blob/master/example/run-server-eshttp.js):\n\n```\n$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/\nRunning 30s test @ http://127.0.0.1:8080/\n  12 threads and 400 connections\n  Thread Stats   Avg      Stdev     Max   +/- Stdev\n    Latency    11.46ms    1.75ms  76.40ms   94.03%\n    Req/Sec     1.76k     1.36k    5.97k    62.83%\n  630789 requests in 30.10s, 72.79MB read\n  Socket errors: connect 155, read 130, write 21, timeout 0\nRequests/sec:  20959.47\nTransfer/sec:      2.42MB\n```\n\n## API\n\n```js\nconst eshttp = require('eshttp');\n```\n\n### eshttp.HttpResponse\n\nRepresents immutable HTTP response.\n\n#### HttpResponse.constructor(code, headers, body)\n\nConstruct immutable HTTP response object that can be reused multiple times to serve different clients.\n\nArgument | Type | Description\n--- | --- | ---\ncode | number | HTTP code\nheaders | Headers \\| object | Response headers object\nbody | string | Response body string\n\n```js\nconst response = new eshttp.HttpResponse(200, { server: 'eshttp' }, 'OK.');\n```\n\n### eshttp.HttpRequest\n\nRepresents immutable HTTP request.\n\n#### HttpRequest.constructor(method, path, headers, body)\n\nConstruct immutable HTTP request object that can be reused multiple times.\n\nArgument | Type | Description\n--- | --- | ---\nmethod | string | HTTP request method (e.g. 'GET')\npath | string | Request path\nheaders | Headers \\| object | Request headers object\nbody | string | Request body string (optional)\n\n```js\nconst request = new eshttp.HttpRequest('GET', '/', { 'User-Agent': 'eshttp' });\n```\n\n### eshttp.HttpServer\n\nRepresents HTTP server.\n\n#### HttpServer.constructor()\n\nConstruct HTTP server object.\n\n```js\nconst server = new eshttp.HttpServer();\n```\n\n#### HttpServer.listen(port)\n\nStart listening to HTTP requests.\n\n```js\nserver.listen(8080);\n```\n\n#### HttpServer.close()\n\nStop listening.\n\n```js\nserver.close();\n```\n\n#### HttpServer.onrequest = function(request)\n\nRequest handler callback.\n\n```js\nserver.onrequest = request =\u003e {\n  console.log('new incoming request');\n};\n```\n\n##LICENSE\n\nMIT\n","funding_links":[],"categories":["JavaScript","net protocol (网络库)"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiefserge%2Feshttp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiefserge%2Feshttp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiefserge%2Feshttp/lists"}