一个 Python 3 异步数据报库
项目描述
jetblack 数据报
用于 UDP 数据报客户端和服务器的 Python 3.8+ asyncio 帮助程序库。
地位
这是有效的,但仍在持续开发中,因此可能会有重大变化。
概述
这个包为 UDP 数据报提供了一个简单的异步 API,遵循与 TCP 流 API 类似的模式。
UDP服务器通过调用来启动,start_udp_server类似于
. 这将返回 a ,它提供读取 ( )、写入 ( ) 和关闭 ( and ) 的方法。这与 TCP 变体不同,后者在客户端连接读写流时提供回调。这是因为 UDP 是无连接的,因此没有连接(或断开连接)事件。数据也是以数据包的形式发送和接收的,因此提供单独的读写流似乎没有任何好处。asyncioDatagramServerreadsendtoclosewait_closed
下面创建一个服务器,读取然后写入一些数据。
server = await start_udp_server(('0.0.0.0', 8000))
data, addr = await server.recvfrom()
print(f"Received {data} from {addr}")
server.sendto(b"Hello", addr)
server.close()
await server.wait_closed()
通过调用open_udp_connection类似于库为 TCP 提供的
open_connection
函数来启动 UDP 客户端,该函数asyncio返回一个DatagramClient. 这为服务器提供了类似的功能,但是addr在读取或写入时不存在,因为套接字在创建时绑定到服务器地址。
client = await open_udp_connection(('127.0.0.1', 8000))
client.send(b"Hello, World!")
data = await client.recv()
print(f"Received {data}")
client.close()
await client.wait_closed()
安装
使用 pip 安装。
pip install jetblack-datagram
入门
创建回显服务器:
import asyncio
from jetblack_datagram import start_udp_server
async def main():
server = await start_udp_server(('127.0.0.1', 9999))
count = 0
while count < 5:
count += 1
print("Reading")
data, addr = await server.recvfrom()
print(f"Received {data!r} from {addr}")
print(f"Send {data!r} to {addr}")
server.sendto(data, addr)
print("Closing")
server.close()
print("Waiting for server to close")
await server.wait_closed()
print("Closed")
print("Done")
if __name__ == '__main__':
asyncio.run(main())
创建回显客户端:
import asyncio
from jetblack_datagram import open_udp_connection
async def main():
client = await open_udp_connection(('127.0.0.1', 9999))
print("Sending data")
client.send(b"Hello, World!")
print("reading data")
data = await client.recv()
print(f"Received {data!r}")
print("closing client")
client.close()
print("waiting for client to close")
await client.wait_closed()
if __name__ == '__main__':
asyncio.run(main())
用法
UDP 协议是无连接的,因此与 TCP 不同,为每个服务器连接提供读取器或为连接提供回调是没有意义的。
常见的
以下方法对客户端和服务器都是通用的。
- 关闭()-> 无
- 异步 wait_closed() -> 无
服务器
以下方法特定于服务器。
- sendto(data: bytes, addr: Union[Address, str]) -> 无
- async recvfrom() -> 元组[字节,地址]
客户
以下方法特定于客户端。
- 发送(数据:字节)-> 无
- 异步 recv() -> 字节
帮手
有一个助手来创建服务器和客户端。
对于服务器:
async def start_udp_server(
addr: Address,
*,
loop: Optional[AbstractEventLoop] = None,
maxreadqueue: int = 0
) -> DatagramServer:
对于客户:
async def open_udp_connection(
addr: Address,
*,
loop: Optional[AbstractEventLoop] = None,
maxreadqueue: int = 0
) -> DatagramClient:
项目详情
关
jetblack_datagram -0.4.1-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ed3f90645db983c6cf790337392a045a847ad68f60e631bf6f898dd19be40cef |
|
| MD5 | af64ca7ed51cdce0a0f4ac55662b732f |
|
| 布莱克2-256 | e21548ed01f3338b7af229521aa11a7c085398bac58c2f26ca738d49020765cd |