wsgi: TCP_NODELAY -> TCP_QUICKACK
Also setsockopt(TCP_NODELAY) sometimes failed (UNIX sockets?). https://github.com/eventlet/eventlet/issues/301 https://news.ycombinator.com/item?id=10607422
This commit is contained in:
@@ -288,11 +288,6 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
minimum_chunk_size = MINIMUM_CHUNK_SIZE
|
minimum_chunk_size = MINIMUM_CHUNK_SIZE
|
||||||
capitalize_response_headers = True
|
capitalize_response_headers = True
|
||||||
|
|
||||||
# Disable nagle algorithm for this socket, if True.
|
|
||||||
# Use only when wbufsize != 0, to avoid small packets.
|
|
||||||
# Contrary to stdlib, it's enabled by default.
|
|
||||||
disable_nagle_algorithm = True
|
|
||||||
|
|
||||||
# https://github.com/eventlet/eventlet/issues/295
|
# https://github.com/eventlet/eventlet/issues/295
|
||||||
# Stdlib default is 0 (unbuffered), but then `wfile.writelines()` looses data
|
# Stdlib default is 0 (unbuffered), but then `wfile.writelines()` looses data
|
||||||
# so before going back to unbuffered, remove any usage of `writelines`.
|
# so before going back to unbuffered, remove any usage of `writelines`.
|
||||||
@@ -302,8 +297,13 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
# overriding SocketServer.setup to correctly handle SSL.Connection objects
|
# overriding SocketServer.setup to correctly handle SSL.Connection objects
|
||||||
conn = self.connection = self.request
|
conn = self.connection = self.request
|
||||||
|
|
||||||
if self.disable_nagle_algorithm:
|
# TCP_QUICKACK is a better alternative to disabling Nagle's algorithm
|
||||||
conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)
|
# https://news.ycombinator.com/item?id=10607422
|
||||||
|
if getattr(socket, 'TCP_QUICKACK', None):
|
||||||
|
try:
|
||||||
|
conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_QUICKACK, True)
|
||||||
|
except socket.error:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.rfile = conn.makefile('rb', self.rbufsize)
|
self.rfile = conn.makefile('rb', self.rbufsize)
|
||||||
|
Reference in New Issue
Block a user