应用 - 鉴权
本协议要求通过 Url 进行连接,连接时还可带上 MetaString。这个,就像 Http 和 Websocket(有 url ,还有 header)。UrlQueryString 和 MetaString,会成为接收端的会话参数(Session::param)。在监听器的 onOpen 事件,可对 Session 进行校验。进而实现鉴权。
1、客户端
- 基于 Url 签权
async def main():
# 会成功
clientSession1 = await SocketD.create_client("sd:ws://127.0.0.1:8602/?u=noear&p=2").open()
await clientSession1.send("/demo", StringEntity("hi"))
# 会失败
clientSessio2 = await SocketD.creat_lient("sd:ws://127.0.0.1:8602/?u=solon&p=1").open();
await clientSessio2.send("/demo2", StringEntity("hi"))
- 也可以使用连接元信息(MetaString)
async def main():
clientSession1 = await (SocketD.createClient("sd:ws://127.0.0.1:8602/")
.config(lambda c: c.meta_put("u", "noear").metaPut("p", "2"))
.open())
2、服务端
服务端可以在连接时通过 outMeta 输出 MetaString,让客户端的 Session::param 获取。
async def on_open(session:Session):
user = session.param("u")
if "noear".__eq__(user):
# 还可以添加握手输出
session.handshake().out_meta("server-ver", "1")
else:
await session.close()
async def on_message(session: Session, message: Message):
log.info(str(message))
async def main():
#::启动服务端
await (SocketD.create_server("sd:ws")
.config(lambda c: c.port(8602))
.listen(EventListener().on_open(on_open).do_on_message(on_message))
.start())