应用 - 上传文件 + 元信息
上传文件,算是一种场景应用了。大文件(或大数据块)上传时,可进行配置优化:
- 服务端
- 处理完成后,执行释放动作 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())