Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34k
Description
Feature or enhancement
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Proposal:
Python's defaulthttp.server should set theTCP_NODELAY flag to accepted connections.
The default python HTTP server (runningpython -m http.server) will write to the socket twice, once for the headerhttps://github.com/python/cpython/blob/d48760b2f1e28dd3c1a35721939f400a8ab619b8/Lib/http/server.py#L771C13-L771C29
and once for the body
Line 679 ind48760b
| self.copyfile(f,self.wfile) |
This causes HTTP transactions on long-lived connections to have a 40 ms delay due to how Delayed Acks and Nagle's Algorithm interact (and they are both enabled by default).
I tested this using fortio on a Ubuntu 20.04 VM.
python -m http.server -p http/1.1# in another sessionfortio load -qps -1 -c 1 http://localhost:8000/some-fileAnother option would be to expose a top-level flag to disable Nagle's with the TCP_NODELAY. Curl does this.
Exposing a TCP flag on the top level API is kinda weird, but disabling it is pretty common behaviour. For example, Golang will disable ithttps://news.ycombinator.com/item?id=34179426