项目背景:
数传服务器项目,需对 与外界交互的 报文进行加/解密,提高数传服务器的报文处理能力;
因为数传服务器需随 便携设备 一起工作,所以并不能简单的依靠增加设备来提高的报文处理能力,因此项目改进点只能是提高单个设备的报文处理能力
目前数传服务器的 IO 已通过 NIO 实现,现自研以 AIO 的方式实现 Demo
相关说明:
数传服务器 属于 服务端功能,对接收到的报文进行 加/解密 后,再转发
目前数传服务器的 IO 已通过 NIO 实现,现自研以 AIO 的方式实现 Demo
demo说明:
- AioServer :封装了 AIO 的 Server 实现,支持不间断的处理 接收到的报文,予以处理后再发送出去;(回调方式实现)
- AioClient :封装了 AIO 的 Client 实现,支持从控制台接受输入作为报文,发送给客户端
NIO 的原理与基本概念,参考:
- https://www.cnblogs.com/Theshy/p/7696313.html
- https://blog.csdn.net/zmx729618/article/details/53171553
Demo实现
主要有两个类:
- AioServer:封装了 AIO 的 Server 实现,支持不间断的处理 接收到的报文,予以处理后再发送出去;(回调方式实现)
- AioClient :封装了 AIO 的 Client 实现,支持从控制台接受输入作为报文,发送给客户端
AioServer
封装了 AIO 的 Server 实现,支持不间断的处理 接收到的报文,予以处理后再发送出去;(回调方式实现)
package com.wj.io.aio;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.*;
import java.util.function.Function;
/**
* AIO 服务端,实现 不间断的 报文 收-处理-发 的过程
*/
public class AioServer implements Runnable {
/**
* 收发消息的编码格式
*/
private final Charset utf8 = Charset.forName("UTF-8");
/**
* 服务端的处理逻辑(Function Interface)
*/
private Function<String, String> service;
/**
* 服务端地址
*/