有些场景请求得半小时，有些则1秒。

### 1、请求超时的控制（对 http、socket、websocket 通道都有效）

* 使用注解控制 timeout （单位：秒）

```java
//在接口使用时配置
@NamiClient(name = "userapi",  path="/rpc/v1/user", timeout=60*5)
UserService userService;

//或者 

//在接口声明时配置
@NamiClient(name = "userapi",  path="/rpc/v1/user", timeout=60*5)
public class UserService{
   //..
}
```

* 使用构建器

```java
UserService userService = Nami.builder().name("userapi").path("/rpc/v1/user")
                                       .timeout(60*5)
                                       .decoder(SnackDecoder.instance)
                                       .encoder(SnackTypeEncoder.instance)
                                       .create(UserService.class);
```

* 使用全局配置（会对全局有影响，使用时注意）

```java
@Configuration
public class Config {
    @Bean
    public NamiConfiguration initNami(){
        return new NamiConfiguration() {
            @Override
            public void config(NamiClient client, NamiBuilder builder) {
                builder.timeout(60*5);
                builder.decoder(SnackDecoder.instance);
                builder.encoder(SnackTypeEncoder.instance);
            }
        };
    }
}
```


### 2、心跳间隔控制（仅对 socket、websocket 通道有效）

* 使用注解控制 heartbeat （单位：少）

```java
@NamiClient(name = "userapi",  path="/rpc/v1/user", heartbeat=30);
UserService userService;
```

* 使用构建器

```java
UserService userService = Nami.builder().name("userapi").path("/rpc/v1/user")
                                       .heartbeat(30)
                                       .decoder(SnackDecoder.instance)
                                       .encoder(SnackTypeEncoder.instance)
                                       .create(UserService.class);
```


* 使用全局配置（会对全局有影响，使用时注意）

```java
@Configuration
public class Config {
    @Bean
    public NamiConfiguration initNami(){
        return new NamiConfiguration() {
            @Override
            public void config(NamiClient client, NamiBuilder builder) {
                builder.heartbeat(30)
                builder.decoder(SnackDecoder.instance);
                builder.encoder(SnackTypeEncoder.instance);
            }
        };
    }
}
```

