Socket.D v2.5.11

应用 - 双向互发 + 会话属性

</> markdown

只要建立会话后,就可以自由的相互监听、相互发消息。这是非常重要的基础,很多场景会用到。

1、客户端

async def on_message(session: Session, message: Message):
    if message.is_request():
        # 答复
        await session.reply_end(message, StringEntity("And you too."))

    # 使用会话属性,加个计数
    count = int(session.attr_or_default("count", 0))
    session.attr_put("count", ++count)

    if count > 5:
        # 超过5次后,停止互发
        return

    # 也主动发一个
    await session.send("/demo3", StringEntity("Hi!"))


async def main():
    #::打开客户端会话
    clientSession = await (SocketD.create_client("sd:ws://127.0.0.1:8602/?u=a&p=2")
                           .listen(EventListener().do_on_message(on_message))
                           .open())

    # 发送并请求(且,等待答复)
    await clientSession.send_and_request("/demo", StringEntity("hello wrold!"))

2、服务端

async def on_message(session:Session, message:Message):
    if message.is_request() or message.is_subscribe():
        #答复
        session.reply_end(message, StringEntity("Server receive: " + message.entity_as_string()))

    #然后,也主动发送一个
    session.send("/demo2", StringEntity("Hi!"))

async def main():
    #::启动服务端
    await (SocketD.create_server("sd:ws")
            .config(lambda c: c.port(8602))
            .listen(EventListener().do_on_message(on_message))
            .start())