本协议要求通过 Url 进行连接，连接时还可带上 MetaString。这个，就像 Http 和 Websocket（有 url ，还有 header）。UrlQueryString 和 MetaString，会成为接收端的会话参数（Session::param）。在监听器的 onOpen 事件，可对 Session 进行校验。进而实现鉴权。

### 1、客户端

* 基于 Url 签权

```python
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）


```python
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 获取。

```python
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())
```

