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

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  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.