zoukankan      html  css  js  c++  java
  • AIO

     
    AsynchronousSeverSocketChannel 异步accept
    AsyncchronousSocketChannel 异步read、write、connect
    CompletionHandler<Void, ? super A>:异步Socket通道进行异步accept、connect、read和write时,IO操作完成通过CompletionHandler类进行处理。
     
    NIO2.0引入了异步通道,异步文件通道和异步套接字通道。
        java.util.concurrent.Future表示异步操作read、write等的返回值
        服务器端在执行异步accept时传入一个异步套接字通道,和客户端进行数据传输
        CompletionHandler接口的实现类作为操作完成的回调
    以时间服务器为例【该例子就是一个短连接,即服务器收到客户端的请求,则响应一下时间,结束】:
    1)主线程main运行,在一个新线程中,即在AsyncTimeServerHandler implements Runnable类中的 doAccept函数中:
        asynchronousServerSocketChannel.accept( this, new AcceptCompletionHandler() );
     例如CompletionHandler<Integer, ByteBuffer>接口中含有 completed(integer result, ByteBuffer attachment)和failed(Throwable exc, ByteBuffer attachment)
    2)如果监听端口成功,则异步ServerSocket通道继续监听,并且异步套接字通道进行异步read,即从客户端接收数据,从异步套接字result传入的数据就是客户端的数据。当接收完成,执行ReadCompletionHandler的completed方法。ReadCompletionHandler将传输客户端数据的异步SocketChannel对象注入。
    3)接收成功后,检测接收到的数据如果符合要求,则会将当前时间写入到上面注入的异步SocketChannel对象。
     
    【总结:异步操作从形式上来看,就是参数中多了一个操作完成后需要执行的一个回调对象CompletionHandler,在该对象中编写异步读、写等完成后的逻辑。并且异步操作返回Future<>类型,future.get()应该是如果此时需要返回的数据,如果还没有完成,就会阻塞等一会儿。】
     
  • 相关阅读:
    PHP操作数据库类
    Apache多站点配置
    NCF HTTP错误502.5-ANCM进程外启动失败
    NCF 中遇到 无法找到数据库配置:Local 后如何解决
    NCF 中遇到 A circular dependency was detected for the service of type 怎么排查
    NCF 如何在Xncf页面表单中使用上传功能
    NCF 如何在Xncf中使用富文本编辑器
    gRPC系列(一)-什么是gRPC
    高性能AVM框架应势而来
    [经验分享]MySQL8.0及以上版本 关闭log-bin 功能
  • 原文地址:https://www.cnblogs.com/kylinxue/p/5231916.html
Copyright © 2011-2022 走看看