在 Session 的接口中，会看到 SendStream、RequestStream 和 SubscribeStream。它们有什么区别？

### 1、Stream 的基础接口

```java
public interface Stream<T extends Stream> {
    //流Id
    String sid();

    //是否完成
    boolean isDone();

    //异常发生时
    T thenError(Consumer<Throwable> onError);

    //进度发生时（发送或接收的进度） @param onProgress (isSend, val, max)
    T thenProgress(TriConsumer<Boolean, Integer, Integer> onProgress);
}
```

### 2、Stream 的三个应用接口

* SendStream 发送流

```java
public interface SendStream extends Stream<SendStream>{}
```

* RequestStream 请求流

```java
public interface RequestStream extends Stream<RequestStream> {
    //异步等待获取答复
    Reply await();

    //答复发生时
    RequestStream thenReply(IoConsumer<Reply> onReply);
}
```

* SubscribeStream 订阅流

```java
public interface SubscribeStream extends Stream<SubscribeStream> {
    //答复发生时
    SubscribeStream thenReply(IoConsumer<Reply> onReply);
}
```