From 429ea8ae37063e44709e3240d528be953d867b16 Mon Sep 17 00:00:00 2001 From: kifile Date: Sat, 8 Mar 2025 08:55:01 +0800 Subject: [PATCH 1/3] bugfix: fix transport exception when multi client connect to same server. --- src/dubbo/protocol/triple/protocol.py | 1 + src/dubbo/remoting/aio/constants.py | 2 ++ src/dubbo/remoting/aio/http2/protocol.py | 8 +++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/dubbo/protocol/triple/protocol.py b/src/dubbo/protocol/triple/protocol.py index 1326507..c714cf4 100644 --- a/src/dubbo/protocol/triple/protocol.py +++ b/src/dubbo/protocol/triple/protocol.py @@ -77,6 +77,7 @@ def export(self, url: URL): # Create a stream handler stream_multiplexer = StreamServerMultiplexHandler(listener_factory) # set stream handler and protocol + url.attributes[aio_constants.LISTENER_FACTORY_KEY] = listener_factory url.attributes[aio_constants.STREAM_HANDLER_KEY] = stream_multiplexer url.attributes[common_constants.PROTOCOL_KEY] = Http2ServerProtocol diff --git a/src/dubbo/remoting/aio/constants.py b/src/dubbo/remoting/aio/constants.py index 17712a8..103c184 100644 --- a/src/dubbo/remoting/aio/constants.py +++ b/src/dubbo/remoting/aio/constants.py @@ -18,6 +18,8 @@ STREAM_HANDLER_KEY = "stream-handler" +LISTENER_FACTORY_KEY = "listener-factory" + CLOSE_FUTURE_KEY = "close-future" HEARTBEAT_KEY = "heartbeat" diff --git a/src/dubbo/remoting/aio/http2/protocol.py b/src/dubbo/remoting/aio/http2/protocol.py index a11f671..18fc17e 100644 --- a/src/dubbo/remoting/aio/http2/protocol.py +++ b/src/dubbo/remoting/aio/http2/protocol.py @@ -22,9 +22,11 @@ from h2.config import H2Configuration from h2.connection import H2Connection +from dubbo.constants import common_constants from dubbo.loggers import loggerFactory from dubbo.remoting.aio import ConnectionStateListener, EmptyConnectionStateListener, constants as h2_constants from dubbo.remoting.aio.exceptions import ProtocolError +from dubbo.remoting.aio.http2.stream_handler import StreamServerMultiplexHandler, StreamClientMultiplexHandler from dubbo.remoting.aio.http2.controllers import RemoteFlowController from dubbo.remoting.aio.http2.frames import ( DataFrame, @@ -76,7 +78,11 @@ def __init__(self, url: URL, h2_config: H2Configuration): self._flow_controller: Optional[RemoteFlowController] = None - self._stream_handler = self._url.attributes[h2_constants.STREAM_HANDLER_KEY] + if self._url.attributes[common_constants.PROTOCOL_KEY] == Http2ServerProtocol: + listener_factory = self._url.attributes[h2_constants.LISTENER_FACTORY_KEY] + self._stream_handler = StreamServerMultiplexHandler(listener_factory) + else: + self._stream_handler = self._url.attributes[h2_constants.STREAM_HANDLER_KEY] # last time of receiving data self._last_read = time.time() From a2a59a709da4bdf5130e49f604ab95e04c2b8836 Mon Sep 17 00:00:00 2001 From: kifile Date: Mon, 17 Mar 2025 21:51:30 +0800 Subject: [PATCH 2/3] Remove unused import. --- src/dubbo/remoting/aio/http2/protocol.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dubbo/remoting/aio/http2/protocol.py b/src/dubbo/remoting/aio/http2/protocol.py index 18fc17e..a762d0a 100644 --- a/src/dubbo/remoting/aio/http2/protocol.py +++ b/src/dubbo/remoting/aio/http2/protocol.py @@ -26,7 +26,7 @@ from dubbo.loggers import loggerFactory from dubbo.remoting.aio import ConnectionStateListener, EmptyConnectionStateListener, constants as h2_constants from dubbo.remoting.aio.exceptions import ProtocolError -from dubbo.remoting.aio.http2.stream_handler import StreamServerMultiplexHandler, StreamClientMultiplexHandler +from dubbo.remoting.aio.http2.stream_handler import StreamServerMultiplexHandler from dubbo.remoting.aio.http2.controllers import RemoteFlowController from dubbo.remoting.aio.http2.frames import ( DataFrame, From cd26dc16e77832c69ec9041ef24abc20fb59908e Mon Sep 17 00:00:00 2001 From: kifile Date: Sat, 22 Mar 2025 19:29:08 +0800 Subject: [PATCH 3/3] Remove unused properties. --- src/dubbo/protocol/triple/protocol.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/dubbo/protocol/triple/protocol.py b/src/dubbo/protocol/triple/protocol.py index c714cf4..f4aa4d3 100644 --- a/src/dubbo/protocol/triple/protocol.py +++ b/src/dubbo/protocol/triple/protocol.py @@ -31,8 +31,7 @@ from dubbo.remoting.aio import constants as aio_constants from dubbo.remoting.aio.http2.protocol import Http2ClientProtocol, Http2ServerProtocol from dubbo.remoting.aio.http2.stream_handler import ( - StreamClientMultiplexHandler, - StreamServerMultiplexHandler, + StreamClientMultiplexHandler ) from dubbo.url import URL @@ -74,11 +73,8 @@ def export(self, url: URL): listener_factory = functools.partial(ServerTransportListener, self._path_resolver, method_executor) - # Create a stream handler - stream_multiplexer = StreamServerMultiplexHandler(listener_factory) # set stream handler and protocol url.attributes[aio_constants.LISTENER_FACTORY_KEY] = listener_factory - url.attributes[aio_constants.STREAM_HANDLER_KEY] = stream_multiplexer url.attributes[common_constants.PROTOCOL_KEY] = Http2ServerProtocol # Create a server