### 1、几个会话相关的超时概念

| 超时 | 默认值 | 描述 |
| -------- | -------- | -------- |
| ::公共     |      |      |
| idleTimeout     | 60s     | 连接空闲超时（尽量不要改动）     |
| requestTimeout     | 10s     | 请求默认超时     |
| streamTimeout     | 2h     | 消息流默认超时     |
| ::客户端     |      |      |
| connectTimeout     |  10s    |   连接超时   |
| heartbeatInterval     |  20s    |   心跳间隔（这个不算超时）   |


### 2、超时详解

* idleTimeout（连接空闲超时）

`idleTimeout` 是给服务端用的，服务端发现客户端一段时间内，都没有消息时会自动关闭会话。而客户端会用 `heartbeatInterval` 配合，客户端会不断的发心跳，避免出现连接空闲超时。两者协作，确保连接的有效果。建议不要修改配置。

* requestTimeout（请求默认超时）


某一次发起请求后，一段时间内没有答复的话就会超时。以下情况，会用到“请求默认超时”

```java
//使用 requestTimeout（请求默认超时）
session.sendAndRequest("demo", new StringEntity(""))
session.sendAndRequest("demo", new StringEntity(""), 0) //0 也可以改为具体的超时
```

如果默认超时不够，可以修改后面的超时参数。

* streamTimeout（消息流默认超时）

某一次发起订阅后，一段时间内没有答复的话就会超时。以下情况，会用到“消息流默认超时”

```java
//使用 streamTimeout（消息流默认超时）
session.sendAndRequest("demo", new StringEntity(""), -1)
session.sendAndSubscribe("demo", new StringEntity(""))
session.sendAndSubscribe("demo", new StringEntity(""), 0) 
```

如果默认超时不够，可以修改后面的超时参数。如果想让订阅永久有效？那可以改用“监听”。

* connectTimeout（连接超时）

```java
//使用默认连接超时
SocketD.createClient(...).open();

//配置连接超时（改为 60s）
SocketD.createClient(...).config(c->c.connectTimeout(60_000)).open();
```



