Meghan Denny
5b7fd9ed0e
node:_http_server: implement Server.prototype.closeIdleConnections ( #22234 )
2025-09-04 15:18:31 -07:00
Jarred Sumner
7b31393d44
Don't run the "Date" header timer every second all the time ( #21850 )
...
### What does this PR do?
Only reschedule the Date header while there are in-flight incoming HTTP
requests.
Update the Date header if, at the time we reschedule it, it is now
stale.
Goal: don't wake up Bun's process on every second when we're idly doing
nothing.
| Metric | this branch | main |
|--------|--------------------------|-------------------|
| **task-clock** | **35.24 msec** 🟢 | **102.79 msec** |
| **context-switches** | 619 🟢 | 1,699 |
| **cpu-migrations** | 11 🟢 | 35 |
| **page-faults** | 2,173 | 2,174 |
| **cpu_atom/instructions** | **109,904,685 (1.76 insn/cycle)** 🟢 |
**67,880,002 (0.55 insn/cycle)** |
| **cpu_core/instructions** | **87,183,124 (1.07 insn/cycle)** 🟢 |
**32,939,500 (0.44 insn/cycle)** |
| **cpu_atom/cycles** | 62,527,125 (1.774 GHz) 🔻 | 122,448,620 (1.191
GHz) |
| **cpu_core/cycles** | 81,651,366 (2.317 GHz) 🟢 | 75,584,111 (0.735
GHz) |
| **cpu_atom/branches** | 9,632,460 (273.338 M/sec) 🔻 | 12,119,616
(117.909 M/sec) |
| **cpu_core/branches** | 17,417,756 (494.259 M/sec) 🟢 | 6,901,859
(67.147 M/sec) |
| **cpu_atom/branch-misses** | 192,013 (1.99%) 🟢 | 1,735,446 (14.32%) |
| **cpu_core/branch-misses** | 473,567 (2.72%) 🟢 | 499,907 (7.24%) |
| **TopdownL1 (cpu_core)** | 31.4% backend_bound<br>11.7%
bad_speculation<br>36.0% frontend_bound 🔻 <br>20.9% retiring<br>34.1%
bad_speculation<br>41.9% retiring<br>0.0% backend_bound<br>24.0%
frontend_bound 🔻 | 21.3% backend_bound<br>9.6% bad_speculation<br>56.2%
frontend_bound<br>12.9% retiring<br>-20.0% bad_speculation<br>55.2%
retiring<br>26.2% backend_bound<br>38.6% frontend_bound |
| **time elapsed** | 1000.0219 s | 1000.0107 s |
| **user time** | — | 0.042667 s |
| **sys time** | — | 0.060309 s |
### How did you verify your code works?
Added a test
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-14 15:39:09 -07:00
Jarred Sumner
8750f0b884
Add FileRoute for serving files ( #20198 )
...
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com >
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com >
2025-06-10 19:41:21 -07:00
Jarred Sumner
9bee7a64a2
Support method-specific routes for html & static routes ( #19710 )
2025-05-17 00:28:01 -07:00
Ciro Spaciari
0a0205be6e
compat(node:http) more ( #19527 )
...
Co-authored-by: cirospaciari <6379399+cirospaciari@users.noreply.github.com >
Co-authored-by: 190n <ben@bun.sh >
2025-05-10 21:28:31 -07:00
pfg
00a3cbd977
more child-process ( #18688 )
...
Co-authored-by: pfgithub <6010774+pfgithub@users.noreply.github.com >
2025-05-06 22:12:24 -07:00
Ciro Spaciari
59b2a60790
compat(node:http) more passing ( #19236 )
...
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com >
Co-authored-by: 190n <ben@bun.sh >
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-04-24 19:26:55 -07:00
Ciro Spaciari
218ee99155
compat(node:http) more compatibility improvements ( #19063 )
2025-04-18 19:57:02 -07:00
Don Isaac
27cf65a1e2
refactor(uws): remove unused uws_res_write_headers ( #18607 )
2025-03-28 17:52:05 -07:00
Ciro Spaciari
a548c2ec54
fix(node:http) properly signal server drain after draining the socket buffer ( #18479 )
2025-03-26 16:41:17 -07:00
Kai Tamkun
60acfb17f0
node:http compatibility (options.lookup) (#18395 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-03-24 23:49:02 -07:00
Kai Tamkun
4a0e982bb2
node:http improvements ( #17093 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: Pham Minh Triet <92496972+Nanome203@users.noreply.github.com >
Co-authored-by: snwy <snwy@snwy.me >
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com >
Co-authored-by: cirospaciari <cirospaciari@users.noreply.github.com >
Co-authored-by: Ben Grant <ben@bun.sh >
2025-03-10 20:19:29 -07:00
Jarred Sumner
aada6f930f
Fix heap snapshots memory usage stats. Introduce estimateDirectMemoryUsageOf function in "bun:jsc" ( #15790 )
2024-12-16 20:16:23 -08:00
Ciro Spaciari
8c0c97a273
fix(ws) ping without parameters ( #15319 )
2024-11-21 17:48:50 -08:00
Jarred Sumner
67b4478137
Fixes #14333 ( #14679 )
2024-10-19 01:14:13 -07:00
Ciro Spaciari
1011b44d78
fix(node:http) implement request.setTimeout and server.setTimeout ( #13772 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-09-06 17:52:38 -07:00
Jarred Sumner
03de99afcf
Add tests for static routes + support server.reload for static routes ( #13643 )
2024-08-31 03:32:08 -07:00
Jarred Sumner
1bed7a7fd1
Introduce static option in Bun.serve() ( #13540 )
2024-08-30 01:36:18 -07:00
Ciro Spaciari
6fd06dd023
fix(Bun.serve) ensure timeout reset when we write data ( #13525 )
2024-08-25 20:27:49 -07:00
Ciro Spaciari
384988f26c
feat(Bun.serve idleTimeout) allow custom timeouts ( #13453 )
2024-08-21 18:13:03 -07:00
Jarred Sumner
639e9a83d5
Add nullability annotations ( #13048 )
2024-08-04 21:16:41 -07:00
Ciro Spaciari
b2a4df68c3
fix(server) fix extra data sent in HTTP after sendfile + Date headers ( #12978 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-07-31 20:22:52 -07:00
Jarred Sumner
dbd320ccfa
Remove some dynamic memory allocations in uWebSockets ( #12897 )
2024-07-29 15:10:55 -03:00
Jarred Sumner
bbf2f5d716
Experiment: disable C++ static destructors ( #12652 )
...
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com >
2024-07-21 21:32:52 -07:00
Ciro Spaciari
11f8d3cb24
fix(server) fix abrupt stop ( #12472 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com >
Co-authored-by: cirospaciari <cirospaciari@users.noreply.github.com >
2024-07-11 18:22:23 -07:00
Ciro Spaciari
1cde9bcdac
fix(server) fix body-stream ( #9898 )
...
* some fixes
* WIP
* wip wip
* more debug
* closer
* sending a really big payload at once is still broken
* now we need to avoid segfault happening inside onWritable after destroy
* opsie
* cleanup
* more cleanup
* more WIP, closer need to fix cork
* fix cork actually not writing non-optional data
* make onWritable return actually do something
* actually clean the on writable handler
* remove unreachable condition
* we are not looping anymore
* little revert
* fix possible fault
* inform backpressure on chunked encoding
* just queue when tryEnd
* remove unreachable code
2024-04-03 20:25:05 -07:00
Ciro Spaciari
289d23b377
fix(uws) uWS uintmax_t > uint64_t ( #9866 )
...
* wip check this on Posix, probably better to used fixed types on uWS instead of uintmax_t here
* uintmax_t > u64
2024-04-03 01:57:33 -07:00
Jarred Sumner
2765347b65
Enable more C++ warnings ( #9602 )
...
* Enable more C++ warnings
* Only enable these ones in release builds
* Update MessagePortChannel.cpp
* Update BunProcess.cpp
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2024-03-24 17:28:58 -07:00
Jarred Sumner
44959e6826
Make printing errors faster ( #9328 )
...
* Make printing errors faster
* Make Next.js tests less flaky
* Update dev-server.test.ts
* Copy over runner from process pr
* bump next version
* Update javascript.zig
* Set port to 0
* p-queue
* no dont use docker buildx
* Prevent runner from hanging
* Update dev-server.test.ts
* Really fix hanging this time
* Fix bounds check for unix domain socket, support abstract namespace sockets
* Various fixes
* [autofix.ci] apply automated fixes
* Update runner.node.mjs
* Update runner.node.mjs
* windows
* Only care about stdout
* increase concureency + clean up test
* Tweak puppeteer
* Update runner.node.mjs
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-03-09 09:48:46 -08:00
Jarred Sumner
70f344101b
Revert " feat(server): add server backlog parameter ( #7822 )" ( #7908 )
...
This reverts commit 411094b82d .
2023-12-28 23:44:27 -08:00
Hanaasagi
411094b82d
feat(server): add server backlog parameter ( #7822 )
...
* feat(server): add server backlog parameter
* add some tests
* Apply suggestions from code review
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com >
* fix test
* chore: fix style
---------
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com >
2023-12-28 14:19:20 -03:00
Hanaasagi
b5fb980145
fix(requestIP): fix type cast from binary to text format for IPv4. ( #6725 )
...
* fix(requestIP): fix type cast from binary to text format for IPv4.
Close : #6668
* use ares_inet_ntop
2023-10-26 12:31:53 -03:00
Ai Hoshino
e0e9bc16bf
fix(serve): fix close_connection behaviour in endWithoutBody ( #6315 )
...
Close : #6031
2023-10-05 20:43:58 -03:00
dave caruso
eddb0078b5
fix(runtime): followup for server.requestIP ( #6185 )
...
* fix(runtime): followup for `server.requestIP`
* oops
* yeah
* sure
* Update src/deps/libuwsockets.cpp
* Update Dockerfile
* lol
---------
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2023-09-29 16:17:54 -07:00
dave caruso
6afa78120a
feat(runtime): implement server.requestIp + node:http socket.address() ( #6165 )
...
* [server] requestIp and AnyRequestContext
Changed Request.uws_request to the new AnyRequestContext. This
allows grabbing the IP from a Request. Unfinished.
* [server] basic `requestIp` implementation
Currently using uws's requestIpAsText, which always returns a ipv6
string. We should return a `SocketAddress` object to the user instead,
which will contain the formatted address string and what type it is.
We'll have to use requestIpAsBinary and parse that ourselves.
* TypeScript docs, use `bun.String`, return `undefined` instead of `null`
if we can't get the ip.
* binary address formatting
* uws getRemoteAddress binding
* remove dead code
* working
* final touches✨
* I will abide by the results of this poll.
---------
Co-authored-by: Parzival-3141 <29632054+Parzival-3141@users.noreply.github.com >
2023-09-29 03:39:26 -07:00
Ciro Spaciari
648d5aecf3
fix server end of stream, fix fetch not streaming without content-length or chunked encoding, fix case when stream do not return a promise on pull ( #6086 )
2023-09-26 19:31:20 -07:00
Jarred Sumner
a2ddfe6913
Bring uSockets & uWebSockets forks into Bun's repository ( #4372 )
...
* Move uWebSockets and uSockets forks into Bun's repository
* Update Makefile
* Update settings.json
* Update libuwsockets.cpp
* Remove backends we won't be using
* Update bindings.cpp
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2023-08-28 08:38:30 -07:00
Jarred Sumner
4c01454376
Make uploading files with fetch()fast ( #3125 )
...
* Make file uploads fast
* Add benchmark
* Update README.md
* defaults
* print
* prettier
* smaller
* fix(path) fix parse behavior (#3134 )
* Add macro docs (#3139 )
* Add macro doc
* Updates
* Tweaks
* Update doc
* Update macro serialization doc
* Update macro doc
* `--no-macros` flag, disable macros in node_modules
* invert base/filename internally (#3141 )
* always false
* Fix broken test
* Add a test sendfile() test with large file
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com >
Co-authored-by: Colin McDonnell <colinmcd94@gmail.com >
2023-05-31 17:20:30 -07:00
Ciro Spaciari
3870f674f9
fix(tls.connect) fix SNI on tls sockets and also servername (mongodb) ( #2934 )
...
* fixes SNI on tls sockets and also servername
* 💅
* 💅
* add support for https and wss
* fix bun types
* support Bun.file on ca, key and cert
* 💅
* add setTimeout (makes fastify run)
* fix httpVersion
* fix WebSocketServer and add listen event
* fix ws exports and http listening
* fix default import
* bump uws
* add nodebuffer compatibility
* fix drain and allow more passing tests to run
* fix enqueud messages
* default to arraybuffer
* fix constructor binaryType
* fmt
* fixup
* skip some tests
* skip more
* skip fault tests
* reuse encoder instance
* fix handshake WS Client
* temporary revert handshake fix
* fix handshake
* disable all socket.io test temp
* fixup
* add back socket.io tests
* use node_fs to read cert, ca and key on server.zig
* throw the error returned by NodeFS
* 💅
2023-05-21 09:50:53 -07:00
Ciro Spaciari
c6c21eeba7
added some improvements on server ( #2803 )
...
* added some improvements on server
* undo unintended change
* clean data handler before end calls
* refactor
* make ctx.resp nullable
---------
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2023-05-08 14:10:40 -07:00
Jarred Sumner
767fdfbb97
Fixes #2499 ( #2501 )
...
* Fixes #2499
* This needs to be quoted
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
2023-03-29 09:37:15 -03:00
Ciro Spaciari
8c4ed963ec
fix(uWS:capi) uws_req_set_yield typo and uws_res_override_write_offset ( #1996 )
2023-02-06 12:59:04 -08:00
Jarred Sumner
d4f1d29393
Fix https websockets
2023-01-12 19:38:27 -08:00
Jarred Sumner
2eac47a123
Upgrade uSockets
2023-01-12 19:38:27 -08:00
Ciro Spaciari
6ede31cb04
Updating libuwebsockets C API ( #1423 )
2022-10-30 01:03:11 -07:00
Jarred Sumner
ce0efc37cc
build faiilures
2022-10-18 03:12:34 -07:00
Jarred Sumner
2852520d90
Fix WebSocket server sending invalid data at the end
2022-10-16 00:13:51 -07:00
Jarred Sumner
4b5af13ac0
WebSocket Server support
2022-10-15 03:06:41 -07:00
Jarred Sumner
dbd569d2ab
remove config struct
2022-10-11 23:44:35 -07:00
Jarred Sumner
af6476ca74
Work around Zig C ABI bug on Linux
2022-10-11 01:10:39 -07:00