Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES/10714.misc.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Improved web server performance when connection can be reused -- by :user:`bdraco`.
4 changes: 4 additions & 0 deletions aiohttp/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,10 @@ def make_mocked_request(
if protocol is None:
protocol = mock.Mock()
protocol.transport = transport
type(protocol).peername = mock.PropertyMock(
return_value=transport.get_extra_info("peername")
)
type(protocol).ssl_context = mock.PropertyMock(return_value=sslcontext)

if writer is None:
writer = mock.Mock()
Expand Down
25 changes: 25 additions & 0 deletions aiohttp/web_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
)

import yarl
from propcache import under_cached_property

from .abc import AbstractAccessLogger, AbstractAsyncAccessLogger, AbstractStreamWriter
from .base_protocol import BaseProtocol
Expand All @@ -47,6 +48,8 @@
__all__ = ("RequestHandler", "RequestPayloadError", "PayloadAccessError")

if TYPE_CHECKING:
import ssl

from .web_server import Server


Expand Down Expand Up @@ -189,6 +192,7 @@ class RequestHandler(BaseProtocol, Generic[_Request]):
"_current_request",
"_timeout_ceil_threshold",
"_request_in_progress",
"_cache",
)

def __init__(
Expand Down Expand Up @@ -275,13 +279,34 @@ def __init__(
self._close = False
self._force_close = False
self._request_in_progress = False
self._cache: dict[str, Any] = {}

def __repr__(self) -> str:
return "<{} {}>".format(
self.__class__.__name__,
"connected" if self.transport is not None else "disconnected",
)

@under_cached_property
def ssl_context(self) -> Optional["ssl.SSLContext"]:
"""Return SSLContext if available."""
return (
None
if self.transport is None
else self.transport.get_extra_info("sslcontext")
)

@under_cached_property
def peername(
self,
) -> Optional[Union[str, Tuple[str, int, int, int], Tuple[str, int]]]:
"""Return peername if available."""
return (
None
if self.transport is None
else self.transport.get_extra_info("peername")
)

@property
def keepalive_timeout(self) -> float:
return self._keepalive_timeout
Expand Down
6 changes: 2 additions & 4 deletions aiohttp/web_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,8 @@ def __init__(
self._client_max_size = client_max_size
self._loop = loop

transport = protocol.transport
assert transport is not None
self._transport_sslcontext = transport.get_extra_info("sslcontext")
self._transport_peername = transport.get_extra_info("peername")
self._transport_sslcontext = protocol.ssl_context
self._transport_peername = protocol.peername

if remote is not None:
self._cache["remote"] = remote
Expand Down
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ brotli==1.1.0 ; platform_python_implementation == "CPython"
# via -r requirements/runtime-deps.in
cffi==1.17.1
# via pycares
frozenlist==1.5.0
frozenlist==1.6.0
# via
# -r requirements/runtime-deps.in
# aiosignal
Expand Down
2 changes: 1 addition & 1 deletion requirements/constraints.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ freezegun==1.5.1
# via
# -r requirements/lint.in
# -r requirements/test.in
frozenlist==1.5.0
frozenlist==1.6.0
# via
# -r requirements/runtime-deps.in
# aiosignal
Expand Down
2 changes: 1 addition & 1 deletion requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ freezegun==1.5.1
# via
# -r requirements/lint.in
# -r requirements/test.in
frozenlist==1.5.0
frozenlist==1.6.0
# via
# -r requirements/runtime-deps.in
# aiosignal
Expand Down
2 changes: 1 addition & 1 deletion requirements/runtime-deps.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ brotli==1.1.0 ; platform_python_implementation == "CPython"
# via -r requirements/runtime-deps.in
cffi==1.17.1
# via pycares
frozenlist==1.5.0
frozenlist==1.6.0
# via
# -r requirements/runtime-deps.in
# aiosignal
Expand Down
2 changes: 1 addition & 1 deletion requirements/test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ forbiddenfruit==0.1.4
# via blockbuster
freezegun==1.5.1
# via -r requirements/test.in
frozenlist==1.5.0
frozenlist==1.6.0
# via
# -r requirements/runtime-deps.in
# aiosignal
Expand Down
Loading