Улучшенный API для асинхронного UDP.
API-интерфейс для UDP, похожий на веб-сокеты.
Вот пример эхо-сервера:
import asyncio
import signal
import aioudp
async def main ():
async def handler ( connection ):
async for message in connection :
await connection . send ( message )
# Optional. This is for properly exiting the server when Ctrl-C is pressed
# or when the process is killed/terminated
loop = asyncio . get_running_loop ()
stop = loop . create_future ()
loop . add_signal_handler ( signal . SIGTERM , stop . set_result , None )
loop . add_signal_handler ( signal . SIGINT , stop . set_result , None )
# Serve the server
async with aioudp . serve ( "localhost" , 9999 , handler ):
await stop # Serve forever
if __name__ == '__main__' :
asyncio . run ( main ())
И клиент для подключения к серверу:
import asyncio
import aioudp
async def main ():
async with aioudp . connect ( "localhost" , 9999 ) as connection :
await connection . send ( b"Hello world!" )
assert await connection . recv () == b"Hello world!"
if __name__ == '__main__' :
asyncio . run ( main ())
Вы можете получить этот проект через pip
$ pip install aioudp
Или, если вы используете Поэзию
$ poetry add aioudp
Примечание
Эта библиотека не предоставляет никаких других абстракций над существующим интерфейсом UDP в asyncio
кроме API на основе async
/ await
. Это означает, что в этой библиотеке не поддерживается неявный протокол, такой как QUIC. Вы должны написать свою собственную или найти другую библиотеку.
async
ввода-вывода. У него есть аналогичный API (о котором я не знал до написания этой библиотеки).© 2021, Брайан Ху
Этот проект распространяется под лицензией GNU GPL v3+.
Короче говоря, это означает, что вы можете делать с ним что угодно (распространять, изменять, продавать), но если вы хотите опубликовать свои изменения, вы должны сделать исходный код и инструкции по сборке легко доступными.
Если вы представляете компанию, использующую этот проект, и хотите сделать исключение, напишите мне по адресу [email protected], и мы обсудим.