zoukankan      html  css  js  c++  java
  • IO,NIO【重点掌握】,Socket,Channel等的网络编程

    (一)what?什么是网络编程?

    ①:概念:本质上是两个设备之间的数据交换

    ②:主要对象:TCP层提供面向应用的可靠的(TCP连接,字节流)或者非可靠的(UDP无连接,报文)的数据传输机制。

    (二)why?为什么要使用网络编程?

    (三)how?怎么使用网络编程?

      (1).Java 网络IO编程:

       ①:分类:

            1.BIO【同步阻塞---  一请求一应答】eg:图解

                【优点:简单 

                  缺点:性能和可靠性都不好

                ①:BIO是什么?what?

                 概念:  通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理没处理完成后,通过输出流返回应答给客户端,线程销毁。即典型的一请求一应答通宵模型

                ②:为什么?why?

                 优点: 一 一对应,

                 缺点:无法高性能高并发接入场景。(原因:服务端----一个线程只能为一个客户端连接

                ③:怎么用?how?

                   详细细节看:Java IO网络编程总结文章。【http://www.cnblogs.com/not-alone/articles/8352000.html】      

     

              1.1(伪异步IO)eg:图解

             优点:有效的控制了线程的最大数量,保证了系统有限的资源的控制,实现了N:M的伪异步I/O模型

             缺点:读取数据较慢时(比如数据量大、网络传输慢等),大量并发的情况下,其他接入的消息只能一直等待

            【只需要将新建线程的地方,交给线程池管理即可,只需改动刚才的Server代码】

              怎么用:Java IO网络编程总结文章。

     

              2.NIO【同步非阻塞】(所有数据都是用缓冲区处理)

              ①:是什么?what?

                 1.1 Nonblock  I/O 无阻塞 I/O。

                  1.2用了哪些工具类东西?

                    ①:缓冲区 Buffer【是对象写入或者读取数据】(分类:ByteBuffer,CharBuffer、ShortBuffer、IntBuffer、LongBuffer、DoubleBuffer。他们实现了相同的接口:Buffer

                    ②:通道 Channel 【通道是双向的,可用于读和写同时操作】(分类:SelectableChannel用户网络读写;FileChannel用于文件操作

                    【后面涉及的ServerSocket和SocketChannel都是SelectableChannel的子类】

                    ③:多路复用器Selector: 

              ②:为什么?why?使用场景高负载,高并发的(网络)应用,like 企鹅帝国】

              ③:怎么做?how? 

                     1.1 Service服务端

                           步骤:①打开ServerSocketChannel,监听客户端连接②绑定监听端口,设置连接为非阻塞创建Reactor线程,创建多路复用器,并启动线程④将ServerSocketChannel注册Reactor线程中的Selector上,监听ACCEPT事件⑤Selector轮询准备就绪的Key⑥Selector监听到新的客户端接入,处理新的接入请求,完成TCP三次握手,建立物理链路⑦设置客户端链路为非阻塞⑧将接入的客户端连接注册到Reactor线程的Selector上,监听读操作,读取客户端发送的网络消息⑨异步读取客户端消息到缓存区⑩对Buffer编解码,边处理半包消息,将解码成功的消息封装成Task  ⒒将应答消息编码为Buffer,调用SocketChannel的write将消息异步发送给客户端

                         Client客户端:与服务端很相似,详细代码看  http://www.cnblogs.com/not-alone/articles/8352000.html

              3.AIO【异步非阻塞】

                ①:是什么?what? 

                     1.概念:在NIO基础上提供了异步文件通道异步套接字通道的实现。

                 ②:为什么?why? 

                     优点:不需过多的Selector注册的通道进行轮询即可实现异步读写,简化NIO的编程模型。

                  ③:怎么做?how?代码详解看  http://www.cnblogs.com/not-alone/articles/8352000.html  

     (2) 各种I/O  的对比    :

      

         

  • 相关阅读:
    友盟冲突解决com.umeng.weixin.handler.UmengWXHandler cannot be cast to com.umeng.socialize.handler.UMWXHandler
    插入mysql失败,因为java数据类型是个实体类,加上.id就好了
    app升级注意事项version
    关于ehcache缓存中eternal及timeToLiveSeconds和timeToIdleSeconds的说明
    WinFom解决最小化最大化后重绘窗口造成闪烁的问题
    Redis 发布订阅
    Redis 发布订阅
    ASPxGridView
    ASPxGridView
    C#-WebRequest 超时不起作用
  • 原文地址:https://www.cnblogs.com/not-alone/p/8330542.html
Copyright © 2011-2022 走看看