Skip to content

Commit

Permalink
Merge pull request #748 from KeepSafe/client_nodelay
Browse files Browse the repository at this point in the history
Use CORK/NODELAY in client API
  • Loading branch information
asvetlov committed Jan 25, 2016
2 parents 89e3025 + 69e7416 commit d8b1cda
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
1 change: 1 addition & 0 deletions aiohttp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ def _ws_connect(self, url, *,
break

reader = resp.connection.reader.set_parser(WebSocketParser)
resp.connection.writer.set_tcp_nodelay(True)
writer = WebSocketWriter(resp.connection.writer, use_mask=True)
except Exception:
resp.close()
Expand Down
8 changes: 8 additions & 0 deletions aiohttp/client_reqrep.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ def write_bytes(self, request, reader):

try:
if asyncio.iscoroutine(self.body):
request.transport.set_tcp_nodelay(True)
exc = None
value = None
stream = self.body
Expand Down Expand Up @@ -407,12 +408,14 @@ def write_bytes(self, request, reader):
type(result))

elif isinstance(self.body, asyncio.StreamReader):
request.transport.set_tcp_nodelay(True)
chunk = yield from self.body.read(streams.DEFAULT_LIMIT)
while chunk:
yield from request.write(chunk, drain=True)
chunk = yield from self.body.read(streams.DEFAULT_LIMIT)

elif isinstance(self.body, streams.DataQueue):
request.transport.set_tcp_nodelay(True)
while True:
try:
chunk = yield from self.body.read()
Expand All @@ -427,20 +430,24 @@ def write_bytes(self, request, reader):
while chunk:
request.write(chunk)
chunk = self.body.read(self.chunked)
request.transport.set_tcp_nodelay(True)

else:
if isinstance(self.body, (bytes, bytearray)):
self.body = (self.body,)

for chunk in self.body:
request.write(chunk)
request.transport.set_tcp_nodelay(True)

except Exception as exc:
new_exc = aiohttp.ClientRequestError(
'Can not write request body for %s' % self.url)
new_exc.__context__ = exc
new_exc.__cause__ = exc
reader.set_exception(new_exc)
else:
assert request.transport.tcp_nodelay
try:
ret = request.write_eof()
# NB: in asyncio 3.4.1+ StreamWriter.drain() is coroutine
Expand All @@ -458,6 +465,7 @@ def write_bytes(self, request, reader):
self._writer = None

def send(self, writer, reader):
writer.set_tcp_cork(True)
request = aiohttp.Request(writer, self.method, self.path, self.version)

if self.compress:
Expand Down

0 comments on commit d8b1cda

Please sign in to comment.