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

### 1、客户端

* 基于 Url 签权

```java
//会成功
ClientSession clientSession1 = SocketD.createClient("sd:tcp://127.0.0.1:8602/?u=noear&p=2").open();
clientSession1.send("/demo", new StringEntity("hi"));

//会失败
ClientSession clientSessio2 = SocketD.createClient("sd:tcp://127.0.0.1:8602/?u=solon&p=1").open();
clientSessio2.send("/demo2", new StringEntity("hi"));
```

* 也可以使用连接元信息（MetaString）


```java
ClientSession clientSession = SocketD.createClient("sd:tcp://127.0.0.1:8602/")
    .config(c->c.metaPut("u","noear").metaPut("p","2"))
    .open();
```


* 还可以在连接时修改元信息（MetaString）

```javascript
//创建会话（单例）
ClientSession clientSession = SocketD.createClient("sd:ws://127.0.0.1:8602/")
        .connectHandler(con -> {
            //每次连接时，可修改元信息
            con.getConfig().metaPut("u", "noear").metaPut("p", "2");
            return con.connect();
        })
        .open();
```


### 2、服务端

服务端可以在连接时通过 outMeta 输出 MetaString，让客户端的 Session::param 获取。

```java
public class Demo {
    public static void main(String[] args) throws Throwable {
        //::启动服务端
        SocketD.createServer("sd:tcp")
                .config(c -> c.port(8602))
                .listen(new SimpleListener() {
                    @Override
                    public void onOpen(Session session) throws IOException {
                        String user = session.param("u");
                        if ("noear".equals(user) == false) { //如果不是 noear，关闭会话
                            session.close();
                        } else {
                            //还可以添加握手输出
                            session.handshake().outMeta("server-ver","1");
                        }
                    }

                    @Override
                    public void onMessage(Session session, Message message) throws IOException {
                        System.out.println(message);
                    }
                })
                .start();
    }
}
```

