В идеале, поддерживать и генераторы, и методы, обрабатывающие одно сообщение, и объекты с send/recv
Примеры:
# ex №1 - исполняется для каждого пришедшего сообщения, в ответ всегда не более одного сообщенияasyncdefws_as_single_msg_handler(msg:SingleMessage):ifmsg.some_field==42:returnNone# пропускаем ответreturnAnswerMessage.from(msg)# ex №2 - запускается при инициализации подключенияasyncdefws_as_asyncgen(msgs:AsyncIterator[SingleMessage]):asyncformsginmsgs:do_some(msg)yieldAnswerMessage(42)# ex №3 - объект, может иметь своё состояние, переиспользует зависимостиclassWsEndpointConnectionState(WsConnection):asyncdefonstart(self):self.bg_task=asyncio.create_task(self.do_bg_work())asyncdefdo_bg_work(self):whileTrue:awaitself.send(AnswerMessage('tick!')awaitasyncio.sleep(1)asyncdefrecieve(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 Buggystack2025-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
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
В идеале, поддерживать и генераторы, и методы, обрабатывающие одно сообщение, и объекты с send/recv
Примеры: