提醒下，这个没法自己实现。如果你想增加方法，需要参与开源贡献：）

### 1、会话

* Session 会话关键接口（可双向互发互答） 


| 接口                                                                    | 描述       | 
|------------------------------------------|----------|
| session::send(event, entity)->SendStream             | 发送（Qos0）                 |
| session::sendAndRequest(event, entity)->RequestStream   | 发送并请求（且，只收一个答复。Qos1）<br/>//要求必须答复一次    |    
| session::sendAndRequest(event, entity, timeout)->RequestStream   | 带超时   |    
| session::sendAndSubscribe(event, entity)->SubscribeStream | 发送并订阅（且，接收多个答复。Streams）<br/>//在答复结束之前，不限答复次数。 | 
| session::sendAndSubscribe(event, entity, timeout)->SubscribeStream | 带超时 | 
| | | 
| session::reply(from, entity)            | 答复       |                 
| session::replyEnd(from, entity)         | 答复结束     |                   
| | | 
| session::colse()            | 关闭（“本端”不能再发消息，心跳中止）       |                    


### 2、会话接口

* Session 完整接口（以 Java 为例）

```java
/**
 * 会话
 */
public interface Session extends ClientSession, Closeable {
    /**
     * 获取远程地址
     */
    InetSocketAddress remoteAddress() throws IOException;

    /**
     * 获取本地地址
     */
    InetSocketAddress localAddress() throws IOException;

    /**
     * 获取握手信息
     */
    Handshake handshake();

    /**
     * broker player name
     *
     * @since 2.1
     */
    default String name() {
        return param("@");
    }

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

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

    /**
     * 获取握手路径
     */
    String path();

    /**
     * 设置握手新路径
     */
    void pathNew(String pathNew);

    /**
     * 获取所有属性
     */
    Map<String, Object> attrMap();

    /**
     * 是有属性
     *
     * @param name 名字
     */
    boolean attrHas(String name);

    /**
     * 获取属性
     *
     * @param name 名字
     */
    <T> T attr(String name);

    /**
     * 获取属性或默认值
     *
     * @param name 名字
     * @param def  默认值
     */
    <T> T attrOrDefault(String name, T def);

    /**
     * 放置属性
     *
     * @param name  名字
     * @param value 值
     */
    <T> Session attrPut(String name, T value);

    /**
     * 是否有效
     */
    boolean isValid();
    
    /**
     * 是否关闭中
     * */
    boolean isClosing();

    /**
     * 获取会话Id
     */
    String sessionId();

    /**
     * 手动重连（一般是自动）
     */
    void reconnect() throws IOException;

    /**
     * 手动发送 Ping（一般是自动）
     */
    void sendPing() throws IOException;

    /**
     * 发送告警
     */
    void sendAlarm(Message from, String alarm) throws IOException;

    /**
     * 发送
     *
     * @param event  事件
     * @param entity 实体
     * @return 流
     */
    SendStream send(String event, Entity entity) throws IOException;

    /**
     * 发送并请求
     *
     * @param event  事件
     * @param entity 实体
     * @return 流
     */
    default RequestStream sendAndRequest(String event, Entity entity) throws IOException {
        return sendAndRequest(event, entity, 0L);
    }

    /**
     * 发送并请求
     *
     * @param event   事件
     * @param entity  实体
     * @param timeout 超时（单位：毫秒）
     * @return 流
     */
    RequestStream sendAndRequest(String event, Entity entity, long timeout) throws IOException;


    /**
     * 发送并订阅（答复结束之前，不限答复次数）
     *
     * @param event  事件
     * @param entity 实体
     * @return 流
     */
    default SubscribeStream sendAndSubscribe(String event, Entity entity) throws IOException {
        return sendAndSubscribe(event, entity, 0L);
    }

    /**
     * 发送并订阅（答复结束之前，不限答复次数）
     *
     * @param event   事件
     * @param entity  实体
     * @param timeout 超时（单位：毫秒）
     * @return 流
     */
    SubscribeStream sendAndSubscribe(String event, Entity entity, long timeout) throws IOException;

    /**
     * 答复
     *
     * @param from    来源消息
     * @param content 内容
     */
    void reply(Message from, Entity content) throws IOException;

    /**
     * 答复并结束（即最后一次答复）
     *
     * @param from    来源消息
     * @param content 内容
     */
    void replyEnd(Message from, Entity content) throws IOException;
    
    /**
     * 预关闭（用于两段式关闭，执行后对端的 session.isClosing() 为 true）
     */
    void preclose() throws IOException;
    
    /**
     * 关闭
     */
    void close() throws IOException;
}
```