Socket.D v2.5.11

应用 - 上传文件 + 元信息

</> markdown

上传文件,算是一种场景应用了。大文件(或大数据块)上传时,可进行配置优化:

  • 服务端
    • 处理完成后,执行释放动作 message.release()
  • 客户端
    • 使用更小的分片大小(比如 1M)

1、客户端

async def main():
    #::打开客户端会话(使用更小的分片大小,可以节点内存)
    clientSession = await (SocketD.create_client("sd:ws://127.0.0.1:8602/?u=a&p=2")
                            .config(lambda c : c.fragment_size(1024 * 1024))
                            .open())

    # 发送 + 元信息
    await clientSession.send("/demo",  StringEntity("{user:'noear'}").meta_put("Trace-Id", StrUtils.guid()));
    # 发送文件
    with open("/data/user.jpg", "rb") as f:
        await clientSession.send("/demo2",  FileEntity(f, "user.jpg"))

2、服务端

async def on_message(session:Session, message:Message):
    fileName = message.meta(EntityMetas.META_DATA_DISPOSITION_FILENAME);

    if fileName is not None:
        with open("/data/upload/user.jpg", "wb") as f:
            f.write(message.data())
    else:
        log.info(str(message))


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