This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/dubbo-python.git


The following commit(s) were added to refs/heads/main by this push:
     new 462a3f7  bugfix: fix transport exception when multi client connect to 
same ser… (#47)
462a3f7 is described below

commit 462a3f779275850d90fd6eab638ac5ebc931281b
Author: kifile <[email protected]>
AuthorDate: Mon Mar 24 09:39:12 2025 +0800

    bugfix: fix transport exception when multi client connect to same ser… (#47)
    
    * bugfix: fix transport exception when multi client connect to same server.
    
    * Remove unused import.
    
    * Remove unused properties.
---
 src/dubbo/protocol/triple/protocol.py    | 7 ++-----
 src/dubbo/remoting/aio/constants.py      | 2 ++
 src/dubbo/remoting/aio/http2/protocol.py | 8 +++++++-
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/dubbo/protocol/triple/protocol.py 
b/src/dubbo/protocol/triple/protocol.py
index 1326507..f4aa4d3 100644
--- a/src/dubbo/protocol/triple/protocol.py
+++ b/src/dubbo/protocol/triple/protocol.py
@@ -31,8 +31,7 @@ from dubbo.remoting import Server, Transporter
 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,10 +73,8 @@ class TripleProtocol(Protocol):
 
         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.STREAM_HANDLER_KEY] = stream_multiplexer
+        url.attributes[aio_constants.LISTENER_FACTORY_KEY] = listener_factory
         url.attributes[common_constants.PROTOCOL_KEY] = Http2ServerProtocol
 
         # Create a server
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 @@ __all__ = ["STREAM_HANDLER_KEY"]
 
 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..a762d0a 100644
--- a/src/dubbo/remoting/aio/http2/protocol.py
+++ b/src/dubbo/remoting/aio/http2/protocol.py
@@ -22,9 +22,11 @@ from typing import Optional
 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
 from dubbo.remoting.aio.http2.controllers import RemoteFlowController
 from dubbo.remoting.aio.http2.frames import (
     DataFrame,
@@ -76,7 +78,11 @@ class AbstractHttp2Protocol(asyncio.Protocol, abc.ABC):
 
         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()

Reply via email to