socket.d 2.5.8__tar.gz → 2.5.10__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. {socket.d-2.5.8 → socket.d-2.5.10}/PKG-INFO +1 -1
  2. {socket.d-2.5.8 → socket.d-2.5.10}/setup.py +1 -1
  3. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/PKG-INFO +1 -1
  4. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/SocketD.py +1 -1
  5. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Config.py +8 -1
  6. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/ConfigBase.py +8 -0
  7. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/WsAioClientConnector.py +21 -11
  8. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/WsAioServer.py +8 -10
  9. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/impl/AIOServe.py +1 -11
  10. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/impl/AIOWebSocketServerImpl.py +25 -10
  11. {socket.d-2.5.8 → socket.d-2.5.10}/README.md +0 -0
  12. {socket.d-2.5.8 → socket.d-2.5.10}/setup.cfg +0 -0
  13. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/SOURCES.txt +0 -0
  14. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/dependency_links.txt +0 -0
  15. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/requires.txt +0 -0
  16. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/top_level.txt +0 -0
  17. {socket.d-2.5.8 → socket.d-2.5.10}/socket.d.egg-info/zip-safe +0 -0
  18. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/__init__.py +0 -0
  19. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/broker/BroadcastBroker.py +0 -0
  20. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/broker/BrokerFragmentHandler.py +0 -0
  21. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/broker/BrokerListener.py +0 -0
  22. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/broker/BrokerListenerBase.py +0 -0
  23. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/broker/__init__.py +0 -0
  24. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/cluster/ClusterClient.py +0 -0
  25. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/cluster/ClusterClientSession.py +0 -0
  26. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/cluster/LoadBalancer.py +0 -0
  27. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/cluster/__init__.py +0 -0
  28. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/exception/SocketDExecption.py +0 -0
  29. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/exception/__init__.py +0 -0
  30. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/__init__.py +0 -0
  31. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/Client.py +0 -0
  32. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientBase.py +0 -0
  33. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientChannel.py +0 -0
  34. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientConfig.py +0 -0
  35. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientConfigHandler.py +0 -0
  36. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientConnectHandler.py +0 -0
  37. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientConnector.py +0 -0
  38. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientConnectorBase.py +0 -0
  39. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientHandshakeResult.py +0 -0
  40. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientHeartbeatHandler.py +0 -0
  41. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientProvider.py +0 -0
  42. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/ClientSession.py +0 -0
  43. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/client/__init__.py +0 -0
  44. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Asserts.py +0 -0
  45. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Channel.py +0 -0
  46. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/ChannelAssistant.py +0 -0
  47. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/ChannelInternal.py +0 -0
  48. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/ChannelSupporter.py +0 -0
  49. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Codec.py +0 -0
  50. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Costants.py +0 -0
  51. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Entity.py +0 -0
  52. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/EntityMetas.py +0 -0
  53. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Flags.py +0 -0
  54. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/FragmentAggregator.py +0 -0
  55. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/FragmentHandler.py +0 -0
  56. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Frame.py +0 -0
  57. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/FrameIoHandler.py +0 -0
  58. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Frames.py +0 -0
  59. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/HandshakeDefault.py +0 -0
  60. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/IdGenerator.py +0 -0
  61. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Listener.py +0 -0
  62. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Message.py +0 -0
  63. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Processor.py +0 -0
  64. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/Session.py +0 -0
  65. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/__init__.py +0 -0
  66. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/codec/Buffer.py +0 -0
  67. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/codec/ByteBufferCodecReader.py +0 -0
  68. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/codec/ByteBufferCodecWriter.py +0 -0
  69. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/codec/CodecDefault.py +0 -0
  70. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/codec/__init__.py +0 -0
  71. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/EntityDefault.py +0 -0
  72. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/FileEntity.py +0 -0
  73. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/MessageBuilder.py +0 -0
  74. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/MessageDefault.py +0 -0
  75. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/StringEntity.py +0 -0
  76. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/entity/__init__.py +0 -0
  77. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/fragment/FragmentAggregatorDefault.py +0 -0
  78. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/fragment/FragmentHandlerBase.py +0 -0
  79. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/fragment/FragmentHandlerDefault.py +0 -0
  80. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/fragment/FragmentHolder.py +0 -0
  81. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/fragment/__init__.py +0 -0
  82. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/ChannelBase.py +0 -0
  83. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/ChannelDefault.py +0 -0
  84. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/ProcessorDefault.py +0 -0
  85. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/SessionBase.py +0 -0
  86. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/SessionDefault.py +0 -0
  87. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/impl/__init__.py +0 -0
  88. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/EventListener.py +0 -0
  89. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/PathListener.py +0 -0
  90. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/PipelineListener.py +0 -0
  91. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/RouteSelector.py +0 -0
  92. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/RouteSelectorDefault.py +0 -0
  93. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/SimpleListener.py +0 -0
  94. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/core/listener/__init__.py +0 -0
  95. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/server/Server.py +0 -0
  96. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/server/ServerBase.py +0 -0
  97. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/server/ServerConfig.py +0 -0
  98. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/server/ServerProvider.py +0 -0
  99. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/server/__init__.py +0 -0
  100. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/RequestStream.py +0 -0
  101. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/SendStream.py +0 -0
  102. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/Stream.py +0 -0
  103. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/StreamManger.py +0 -0
  104. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/StreamMangerDefault.py +0 -0
  105. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/SubscribeStream.py +0 -0
  106. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/__init__.py +0 -0
  107. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/impl/RequestStreamImpl.py +0 -0
  108. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/impl/SendStreamImpl.py +0 -0
  109. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/impl/StreamBase.py +0 -0
  110. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/impl/SubscribeStreamImpl.py +0 -0
  111. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/transport/stream/impl/__init__.py +0 -0
  112. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/AsyncUtils.py +0 -0
  113. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/CompletableFuture.py +0 -0
  114. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/LogConfig.py +0 -0
  115. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/MapUtils.py +0 -0
  116. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/RunUtils.py +0 -0
  117. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/SessionUtils.py +0 -0
  118. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/StrUtils.py +0 -0
  119. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/__init__.py +0 -0
  120. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/async_api/AtomicRefer.py +0 -0
  121. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/async_api/__init__.py +0 -0
  122. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/sync_api/AtomicRefer.py +0 -0
  123. {socket.d-2.5.8 → socket.d-2.5.10}/socketd/utils/sync_api/__init__.py +0 -0
  124. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TCPAIOServer.py +0 -0
  125. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TCPStreamIO.py +0 -0
  126. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TcpAIOChannelAssistant.py +0 -0
  127. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TcpAioClient.py +0 -0
  128. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TcpAioClientConnector.py +0 -0
  129. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/TcpAioProvider.py +0 -0
  130. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_aio_tcp/__init__.py +0 -0
  131. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/WsAioChannelAssistant.py +0 -0
  132. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/WsAioClient.py +0 -0
  133. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/WsAioProvider.py +0 -0
  134. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/__init__.py +0 -0
  135. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/impl/AIOConnect.py +0 -0
  136. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/impl/AIOWebSocketClientImpl.py +0 -0
  137. {socket.d-2.5.8 → socket.d-2.5.10}/socketd_websocket/impl/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: socket.d
3
- Version: 2.5.8
3
+ Version: 2.5.10
4
4
  Summary: @noear/socket.d python project
5
5
  Home-page: https://socketd.noear.org/
6
6
  Author: noear,bai
@@ -4,7 +4,7 @@ from setuptools import setup,find_packages
4
4
 
5
5
  setup(
6
6
  name='socket.d',
7
- version='2.5.8',
7
+ version='2.5.10',
8
8
  description='@noear/socket.d python project',
9
9
  author='noear,bai',
10
10
  url='https://socketd.noear.org/',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: socket.d
3
- Version: 2.5.8
3
+ Version: 2.5.10
4
4
  Summary: @noear/socket.d python project
5
5
  Home-page: https://socketd.noear.org/
6
6
  Author: noear,bai
@@ -14,7 +14,7 @@ from socketd_aio_tcp.TcpAioProvider import TcpAioProvider
14
14
 
15
15
 
16
16
  def version() -> str:
17
- return "2.5.8"
17
+ return "2.5.10"
18
18
 
19
19
  def protocol_name() -> str:
20
20
  return "Socket.D"
@@ -132,7 +132,8 @@ class Config(ABC):
132
132
  ...
133
133
 
134
134
  @abstractmethod
135
- def get_is_thread(self) -> bool: ...
135
+ def get_is_thread(self) -> bool:
136
+ ...
136
137
 
137
138
  @abstractmethod
138
139
  def get_max_udp_size(self) -> int:
@@ -140,3 +141,9 @@ class Config(ABC):
140
141
  返回允许的最大_uDP包大小。
141
142
  """
142
143
  ...
144
+
145
+ def is_use_subprotocols(self) -> bool:
146
+ """
147
+ 是否使用子协议
148
+ """
149
+ ...
@@ -52,6 +52,7 @@ class ConfigBase(Config, ABC):
52
52
 
53
53
  self.__isThread = False
54
54
  self.__loggerLevel = "INFO"
55
+ self.__useSubprotocols = True;
55
56
 
56
57
  def __del__(self):
57
58
  if self._exchangeExecutor:
@@ -216,3 +217,10 @@ class ConfigBase(Config, ABC):
216
217
  def max_udp_size(self, maxUdpSize):
217
218
  self._maxUdpSize = maxUdpSize
218
219
  return self
220
+
221
+ def use_subprotocols(self, useSubprotocols):
222
+ self.__useSubprotocols = useSubprotocols
223
+ return self
224
+
225
+ def is_use_subprotocols(self) -> bool:
226
+ return self.__useSubprotocols
@@ -40,17 +40,27 @@ class WsAioClientConnector(ClientConnectorBase):
40
40
  self._top = AsyncUtils.run_forever(self._loop, daemon=True)
41
41
 
42
42
  try:
43
- self.__con: AIOConnect = AIOConnect(uri=ws_url,
44
- client=self.client,
45
- ssl=self.client.get_config().get_ssl_context(),
46
- create_protocol=AIOWebSocketClientImpl,
47
- subprotocols=[Subprotocol(SocketD.protocol_name())],
48
- ping_timeout=self.client.get_config().get_idle_timeout() / 1000,
49
- ping_interval=self.client.get_config().get_idle_timeout() / 1000,
50
- logger=logger,
51
- max_size=Constants.MAX_SIZE_FRAME,
52
- message_loop=self._loop
53
- )
43
+ if self.client.get_config().is_use_subprotocols():
44
+ self.__con: AIOConnect = AIOConnect(uri=ws_url,
45
+ client=self.client,
46
+ ssl=self.client.get_config().get_ssl_context(),
47
+ create_protocol=AIOWebSocketClientImpl,
48
+ subprotocols=[Subprotocol(SocketD.protocol_name())],
49
+ ping_timeout=self.client.get_config().get_idle_timeout() / 1000,
50
+ ping_interval=self.client.get_config().get_idle_timeout() / 1000,
51
+ logger=logger,
52
+ max_size=Constants.MAX_SIZE_FRAME,
53
+ message_loop=self._loop)
54
+ else:
55
+ self.__con: AIOConnect = AIOConnect(uri=ws_url,
56
+ client=self.client,
57
+ ssl=self.client.get_config().get_ssl_context(),
58
+ create_protocol=AIOWebSocketClientImpl,
59
+ ping_timeout=self.client.get_config().get_idle_timeout() / 1000,
60
+ ping_interval=self.client.get_config().get_idle_timeout() / 1000,
61
+ logger=logger,
62
+ max_size=Constants.MAX_SIZE_FRAME,
63
+ message_loop=self._loop)
54
64
 
55
65
  self.__real: AIOWebSocketClientImpl | WebSocketClientProtocol = await self.__con
56
66
  handshakeResult: ClientHandshakeResult = await self.__real.handshake_future.get(self.client.get_config().get_connect_timeout() / 1000)
@@ -38,16 +38,14 @@ class WsAioServer(ServerBase):
38
38
  else:
39
39
  __host = self.get_config().get_host()
40
40
 
41
- self._server = AIOServe(ws_handler=None,
42
- host=__host,
43
- port=self.get_config().get_port(),
44
- create_protocol=AIOWebSocketServerImpl,
45
- subprotocols=[Subprotocol(SocketD.protocol_name())],
46
- ws_aio_server=self,
47
- ssl=self.get_config().get_ssl_context(),
48
- logger=logger,
49
- max_size=Constants.MAX_SIZE_FRAME
50
- )
41
+ self._server = AIOServe(
42
+ host=__host,
43
+ port=self.get_config().get_port(),
44
+ create_protocol=AIOWebSocketServerImpl,
45
+ ws_aio_server=self,
46
+ ssl=self.get_config().get_ssl_context(),
47
+ logger=logger,
48
+ max_size=Constants.MAX_SIZE_FRAME)
51
49
 
52
50
  log.info("Socket.D server started: {server=" + self.get_config().get_local_url() + "}")
53
51
  await self._server
@@ -8,7 +8,6 @@ from wsgiref.headers import Headers
8
8
  from websockets import WebSocketServerProtocol, LoggerLike, Origin, Subprotocol
9
9
  from websockets.extensions import ServerExtensionFactory
10
10
  from websockets.extensions.permessage_deflate import enable_server_permessage_deflate
11
- from websockets.headers import validate_subprotocols
12
11
  from websockets.http import USER_AGENT
13
12
  from websockets import WebSocketServer
14
13
  from websockets.legacy.server import HeadersLikeOrCallable, HTTPResponse, remove_path_argument,serve
@@ -20,15 +19,11 @@ class AIOServe:
20
19
 
21
20
  """
22
21
 
23
- def __init__(self, ws_handler: Union[
24
- Callable[[WebSocketServerProtocol], Awaitable[Any]],
25
- Callable[[WebSocketServerProtocol, str], Awaitable[Any]],
26
- ], host: Optional[Union[str, Sequence[str]]] = None, port: Optional[int] = None, ws_aio_server=None, *,
22
+ def __init__(self, host: Optional[Union[str, Sequence[str]]] = None, port: Optional[int] = None, ws_aio_server=None, *,
27
23
  create_protocol: Optional[Callable[..., WebSocketServerProtocol]] = None,
28
24
  logger: Optional[LoggerLike] = None, compression: Optional[str] = "deflate",
29
25
  origins: Optional[Sequence[Optional[Origin]]] = None,
30
26
  extensions: Optional[Sequence[ServerExtensionFactory]] = None,
31
- subprotocols: Optional[Sequence[Subprotocol]] = None,
32
27
  extra_headers: Optional[HeadersLikeOrCallable] = None, server_header: Optional[str] = USER_AGENT,
33
28
  process_request: Optional[
34
29
  Callable[[str, Headers], Awaitable[Optional[HTTPResponse]]]
@@ -72,16 +67,12 @@ class AIOServe:
72
67
  elif compression is not None:
73
68
  raise ValueError(f"unsupported compression: {compression}")
74
69
 
75
- if subprotocols is not None:
76
- validate_subprotocols(subprotocols)
77
-
78
70
  # 自定义protocol
79
71
  factory = functools.partial(
80
72
  create_protocol,
81
73
  # For backwards compatibility with 10.0 or earlier. Done here in
82
74
  # addition to WebSocketServerProtocol to trigger the deprecation
83
75
  # warning once per serve() call rather than once per connection.
84
- remove_path_argument(ws_handler),
85
76
  ws_server,
86
77
  host=host,
87
78
  port=port,
@@ -99,7 +90,6 @@ class AIOServe:
99
90
  legacy_recv=legacy_recv,
100
91
  origins=origins,
101
92
  extensions=extensions,
102
- subprotocols=subprotocols,
103
93
  extra_headers=extra_headers,
104
94
  server_header=server_header,
105
95
  process_request=process_request,
@@ -1,11 +1,11 @@
1
1
  from __future__ import annotations
2
2
  import asyncio
3
- from typing import Optional, Union
3
+ from typing import Optional, Union, Sequence
4
4
 
5
- from websockets import ConnectionClosedOK, ConnectionClosedError, ConnectionClosed
6
- from websockets.frames import Opcode
5
+ from websockets import ConnectionClosedOK, ConnectionClosedError, Subprotocol, Headers, InvalidOrigin
7
6
  from websockets.server import WebSocketServer, WebSocketServerProtocol
8
7
 
8
+ from socketd import SocketD
9
9
  from socketd.transport.core.Channel import Channel
10
10
  from socketd.transport.core.ChannelInternal import ChannelInternal
11
11
  from socketd.utils.LogConfig import log
@@ -16,7 +16,7 @@ from socketd.transport.core.Frame import Frame
16
16
 
17
17
  class AIOWebSocketServerImpl(WebSocketServerProtocol):
18
18
 
19
- def __init__(self, ws_handler, ws_server: WebSocketServer, ws_aio_server: 'WsAioServer',
19
+ def __init__(self, ws_server: WebSocketServer, ws_aio_server: 'WsAioServer',
20
20
  *args, **kwargs):
21
21
  self.ws_aio_server = ws_aio_server
22
22
  self.__ws_server: WebSocketServer = ws_server
@@ -27,6 +27,23 @@ class AIOWebSocketServerImpl(WebSocketServerProtocol):
27
27
  *args,
28
28
  **kwargs)
29
29
 
30
+ def process_subprotocol(self, headers: Headers, available_subprotocols: Optional[Sequence[Subprotocol]]) \
31
+ -> Optional[Subprotocol]:
32
+ header_values = headers.get_all("Sec-WebSocket-Protocol")
33
+
34
+ if self.ws_aio_server.get_config().is_use_subprotocols():
35
+ # 开启子协议验证的时候,如果不匹配则拒绝握手
36
+ if bool(header_values) and header_values.__contains__(SocketD.protocol_name()):
37
+ return Subprotocol(SocketD.protocol_name())
38
+ else:
39
+ raise InvalidOrigin("No subprotocols supported")
40
+ else:
41
+ if bool(header_values) and header_values.__contains__(SocketD.protocol_name()):
42
+ return Subprotocol(SocketD.protocol_name())
43
+
44
+ return super().process_subprotocol(headers, available_subprotocols)
45
+
46
+
30
47
  def set_attachment(self, obj: ChannelInternal):
31
48
  self.__attachment = obj
32
49
 
@@ -38,12 +55,10 @@ class AIOWebSocketServerImpl(WebSocketServerProtocol):
38
55
  super().connection_open()
39
56
  self.on_open(self)
40
57
 
41
- async def read_frame(self, max_size: Optional[int]) -> Frame:
42
- frame = await super().read_frame(max_size)
43
- if frame is not None:
44
- if frame.opcode == Opcode.PONG:
45
- await self.assert_handshake()
46
- return frame
58
+ async def keepalive_ping(self) -> None:
59
+ await asyncio.sleep(self.ping_interval)
60
+ if await self.assert_handshake():
61
+ return await super().keepalive_ping()
47
62
 
48
63
  def on_open(self, conn) -> None:
49
64
  """create_protocol"""
File without changes
File without changes
File without changes