上传文件，算是一种场景应用了。大文件（或大数据块）上传时，可进行配置优化：

* 服务端
  * 使用临时文件分片处理方案（FragmentHandlerTempfile）
  * 处理完成后，执行释放动作 message.release()
* 客户端
  * 使用更小的分片大小（比如 1M）

### 1、客户端


```java
public class Demo {
    public static void main(String[] args) throws Throwable {
        //::打开客户端会话（使用更小的分片大小，可以节点内存）
        ClientSession clientSession = SocketD.createClient("sd:tcp://127.0.0.1:8602/?u=a&p=2")
                .config(c -> c.fragmentSize(1024 * 1024)) //1m
                .open();

        //发送 + 元信息
        clientSession.send("/demo", new StringEntity("{user:'noear'}").metaPut("Trace-Id", UUID.randomUUID().toString()));
        //发送文件
        clientSession.send("/demo2", new FileEntity(new File("/data/user.jpg")));
    }
}
```

### 2、服务端

```java
public class Demo {
    public static void main(String[] args) throws Throwable {
        //::启动服务端
        SocketD.createServer("sd:tcp")
                .config(c -> c.port(8602).fragmentHandler(new FragmentHandlerTempfile())) 
                .listen(new SimpleListener(){
                    @Override
                    public void onMessage(Session session, Message message) throws IOException {
                        String fileName = message.meta(EntityMetas.META_DATA_DISPOSITION_FILENAME);

                        if (fileName != null) {
                            File fileNew = new File("/data/upload/user.jpg");
                            fileNew.createNewFile();
                            
                            //使用通道机制，性能更好
                            try (FileChannel fileChannel = new FileOutputStream(fileNew).getChannel()) {
                                fileChannel.write(message.data());
                            } finally {
                                //使用 FragmentHandlerTempfile 时，须对消息做资源释放（就是删除临时文件）
                                message.release();
                            }
                        }else{
                            System.out.println(message);
                        }
                    }
                })
                .start();
    }
}
```
