Git Product home page Git Product logo

netecho's Introduction

Java通讯模型(BIO、NIO、AIO综合演练)

1、常规技术:Spring系统、ORM组件、服务支持;
数据表的CRUD处理(重复且大量的编写),这种开发好像不是开发的感觉。

2、未来的开发人才到底该具备哪些技能 —— 架构师
A、可以完成项目,同时可以很好的沟通;

B、掌握各种常规的开发技术,并且掌握一些服务组件的使用(需要有好的运维);

C、良好的代码设计能力 —— 代码重用与标准设定;

D、非常清楚底层通讯机制,并且可以根据实际的业务需求,进行底层通讯协议的定义;

3、网络通讯的核心**:请求-回应
网络七层模型:
应用层、表示层、会话层、传输层(数据段)、网络层(数据包)、数据链路层(数据帧)、物理层(比特流)。

<br>TCP协议是整个现代项目开发中的基础,包括HTTP协议也都是在TCP基础上实现的。</br>

本次的案例:采用一个标准的ECHO程序 客户端输入一个内容,随后服务器端接收到之后进行数据的返回,在数据前面追加有"【ECHO】"的信息。 "telnet 主机名称 端口号",主要是进行TCP协议的通讯,而对于服务器端是如何实现的并不关注。

一、【JDK 1.0】实现BIO程序开发:同步阻塞IO操作,每一个线程都只会管理一个客户端的链接,这种操作的本质是存在有程序阻塞的问题。 线程的资源总是在不断的进行创建,并且所有的数据接收里面(Scanner、PrintStream简化了),网络的数据都是长度限制的,传统的数据是需要通过字节数组的形式搬砖完成的。 BIO:是需要对数据采用蚂蚁搬家的模式完成的。 程序问题:性能不高、多线程的利用率不高、如果大规模的用户访问,有可能会造成服务器端资源耗尽。

二、【JDK 1.4】提供有了一个java.nio的开发包,从这一时代开始,Java提升了IO的处理效率,同时也提升网络模型的处理效率,同时NIO里面采用的是同步非阻塞IO操作。 NIO的出现在当时来讲,给Java带来了一个最伟大的通讯利器(已经接近于底层的传输性能)。 NIO里面提倡使用Buffer来代替传统的数组操作(蚂蚁搬家),可以减少数组的操作复杂度,利用缓存数据的保存与方便的清空操作进行处理。 Reactor模型提倡的是:公共注册,统一操作,所以会提供有一系列的Channel(通道)。

三、【JDK 1.7】AIO,异步非阻塞IO通讯,需要采用大量的回调处理模式,所以需要使用: public interface CompletionHandler

总结: BIO(同步阻塞IO):在进行处理的时候是通过一个线程进行操作,并且IO实现通讯的时候采用的是阻塞模式; 你现在通过水壶烧水,在BIO的世界里面,烧水这一过程你需要从头一直监视到结尾; NIO(同步非阻塞IO):不断的进行烧水状态的判断,同时你可以做其他的事情; AIO(异步非阻塞IO):烧水的过程你不用关注,如果水一旦烧好了,就会给你一个反馈。

以上所讲解的程序都属于最为基础的通讯模型,但是如果你真的只是依靠这样的开发操作去编写程序,那么基本上就决定你的项目八成会失败。
真实的项目之中如果要想实现这些通讯的操作一般要考虑:粘包和拆包、序列化、HTTP协议如何去写、WebSocket的定义实现。都需要你去精通这些协议。

为了简化这些操作在实际的项目里面,强烈建议,这些底层功能都通过Netty包装。

netecho's People

Contributors

muyan-yootk avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.