Поддержка Websocket #9

Open
opened 2025-07-19 05:48:43 +03:00 by nikto_b · 0 comments
Owner

В идеале, поддерживать и генераторы, и методы, обрабатывающие одно сообщение, и объекты с send/recv
Примеры:

# ex №1 - исполняется для каждого пришедшего сообщения, в ответ всегда не более одного сообщения
async def ws_as_single_msg_handler(msg: SingleMessage):
    if msg.some_field == 42:
        return None # пропускаем ответ
    return AnswerMessage.from(msg)
    
# ex №2 - запускается при инициализации подключения
async def ws_as_asyncgen(msgs: AsyncIterator[SingleMessage]):
    async for msg in msgs:
        do_some(msg)
        yield AnswerMessage(42)
        
# ex №3 - объект, может иметь своё состояние, переиспользует зависимости
class WsEndpointConnectionState(WsConnection):
    async def onstart(self):
        self.bg_task = asyncio.create_task(self.do_bg_work())

    async def do_bg_work(self):
        while True:
            await self.send(AnswerMessage('tick!')
            await asyncio.sleep(1)

    async def recieve(self, msg: SingleMessage):
        self.send(AnswerMessage(42))
В идеале, поддерживать и генераторы, и методы, обрабатывающие одно сообщение, и объекты с send/recv Примеры: ```python # ex №1 - исполняется для каждого пришедшего сообщения, в ответ всегда не более одного сообщения async def ws_as_single_msg_handler(msg: SingleMessage): if msg.some_field == 42: return None # пропускаем ответ return AnswerMessage.from(msg) # ex №2 - запускается при инициализации подключения async def ws_as_asyncgen(msgs: AsyncIterator[SingleMessage]): async for msg in msgs: do_some(msg) yield AnswerMessage(42) # ex №3 - объект, может иметь своё состояние, переиспользует зависимости class WsEndpointConnectionState(WsConnection): async def onstart(self): self.bg_task = asyncio.create_task(self.do_bg_work()) async def do_bg_work(self): while True: await self.send(AnswerMessage('tick!') await asyncio.sleep(1) async def recieve(self, msg: SingleMessage): self.send(AnswerMessage(42)) ```
nikto_b added this to the Base turbosloth release milestone 2025-07-19 05:48:43 +03:00
nikto_b added this to the Base project 2025-07-19 05:48:43 +03:00
nikto_b moved this to To Do in Base on 2025-07-19 05:48:45 +03:00
nikto_b modified the project from Base to Buggystack 2025-07-19 06:04:30 +03:00
nikto_b moved this to To Do in Buggystack on 2025-07-19 06:06:04 +03:00
nikto_b added the
enhancement
label 2025-07-19 06:24:03 +03:00
Sign in to join this conversation.
No description provided.