在 Session 的接口中，Handshake 非常重要的一个，也是会话参数（Session::param）的源来。在监听的 onOpen 事件中，可以做鉴权，可以做握手交互（反馈元信息）。可以获取：

* 连接地址
* 参数。由 queryString 和 metaString 解析后汇总

还可以输出元信息给对端（通过 Session::param 获取）。

```java
public interface Handshake {
    /**
     * 协议版本
     */
    String version();

    /**
     * 获请传输地址
     *
     * @return tcp://192.168.0.1/path?user=1&path=2
     */
    URI uri();

    /**
     * 请求路径
     */
    String path();

    /**
     * 获取参数集合
     */
    Map<String, String> paramMap();

    /**
     * 获取参数
     *
     * @param name 参数名
     */
    String param(String name);

    /**
     * 获取参数或默认值
     *
     * @param name 参数名
     * @param def  默认值
     */
    String paramOrDefault(String name, String def);

    /**
     * 放置参数
     */
    Handshake paramPut(String name, String value);

    /**
     * 输出元信息
     */
    void outMeta(String name, String value);
}
```


应用示例：

```java
//客户端
ClientSession clientSession1 = SocketD.createClient("sd:tcp://127.0.0.1:8602/")
    .config(c->c.metaPut("u","noear").metaPut("p","2"))
    .open();
    
       
//服务端
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");
                        }
                    }
                })
                .start();
    }
}
```