asyncio的create_datagram_endpoint调用了多少次connection_made?

问题描述 投票:0回答:1

Python 的 asyncio 示例展示了如何为 TCP 回显服务器创建“协议类”。该示例似乎表明这些对象为每个客户端连接生成。在这种情况下:connection_made 会为每个新客户端连接触发,并且“传输”实例会为新客户端封装 TCP 流套接字。

https://docs.python.org/3/library/asyncio-protocol.html#tcp-echo-server

我的问题是:这种行为在多大程度上仍然适用于 UDP 服务器?

我对 UDP echo 服务器示例的解释是:

  1. 有1个UDP监听套接字。
  2. UDP 不是面向连接的,因此不需要生成单独的客户端套接字。所有客户端都重复使用同一个套接字。
  3. 因此,“connection_made”不会针对每个客户端触发。服务器启动后,它会触发一次。
  4. 在这种情况下:这与 TCP 回显服务器的工作方式有很大不同,因为不会为每个客户端创建新对象。

https://docs.python.org/3/library/asyncio-protocol.html#udp-echo-server

这是正确的,还是我遗漏了什么?

python python-asyncio
1个回答
0
投票

根据我的经验,你是对的。
看起来“create_datagram_endpoint”创建了一个连接,然后使用它。
当我开始尝试 asyncio.DatagramProtocol 并期望每个新连接都会调用“connection_made”时,这让我很困惑,但事实并非如此,在服务器启动时只建立了一次连接

© www.soinside.com 2019 - 2024. All rights reserved.