Netty学习笔记(1)NIO三大组件】的更多相关文章

Netty简单认识: 1) Netty 是由JBOSS 提供的一个Java 开源框架. 2) Netty 是一个异步的.基于事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络I0 程序. 3) Netty 主要针对在TCP协议下的使用 4)Netty本质是- 个NIO框架,适用于服务器通讯相关的多种应用场景 Netty应用: https://netty.io/wiki/related-projects.html这里面是和netty有关的框架 Netty应用于网络间的通信,如阿里的dubb…
目录 Netty学习笔记 前言 什么是Netty IO基础 概念说明 IO简单介绍 用户空间与内核空间 进程(Process) 线程(thread) 程序和进程 进程切换 进程阻塞 文件描述符 文件句柄 缓存IO Linux 网络I/O模型 同步.异步.阻塞.非阻塞的概念 同步 异步 阻塞 非阻塞 总结 举个例子 I/O模型 阻塞 I/O(blocking IO) 非阻塞 I/O(nonblocking IO) 信号驱动I/O( signal driven IO ) I/O 多路复用( IO m…
在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 JDK8 Netty版本:5.0.0.Alpha2 集成环境:IDEA 构建工具:Gradle 依赖 compile group: 'io.netty', name: 'netty-all', version: '5.0.0.Alpha2' compile group: 'org.projectlom…
前言 本文主要从 select 和 epoll 系统调用入手,来打开 Netty 的大门,从认识 Netty 的基础原理 —— I/O 多路复用模型开始.   Netty 的通信原理 Netty 底层的通信机制是基于I/O多路复用模型构建的,简单一句话概括就是多路网络连接可以复用一个I/O线程,在 Java 层面也就是封装了其 NIO API,但是 JDK 底层基于 Linux 的 epoll 机制实现(其实是三个函数).注意在老旧的 Linux 上,可能还是 select,没考证过,但是时下主…
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组件 在面向对象出现之前,程序是由一系列相互关联的模块和子程序组成,编程采用过程的方式,代码中有一条主线,决定需要完成哪些步骤.后来,面向对象出现了,它是对软件领域的杰出贡献,是软件设计中的里程碑.在软件发展速度远远落后硬件发展速度的时代,它的出现无疑是一种激励.它把程序想象成一系列的相互交互的对象,…
amazeui学习笔记--css(常用组件16)--文章页Article 一.总结 1.基本使用:文章内容页的排版样式,包括标题.文章元信息.分隔线等样式. .am-article 文章内容容器 .am-article-hd 文章头部,包含标题.元数据等 .am-article-title 文章标题 .am-article-meta 文章元数据,如作者.发布日期等 .am-article-bd 文章正文部分 .am-article-lead 文章摘要.导读等信息 .am-article-divi…
amazeui学习笔记--css(常用组件15)--CSS动画Animation 一.总结 1.css3动画封装:CSS3 动画封装,浏览器需支持 CSS3 动画. Class 描述 .am-animation-fade 淡入 .am-animation-scale-up 逐渐放大 .am-animation-scale-down 逐渐缩小 .am-animation-slide-top 顶部滑入 .am-animation-slide-bottom 底部滑入 .am-animation-sli…
amazeui学习笔记--css(常用组件14)--缩略图Thumbnail 一.总结 1.基本样式:在 <img> 添加 .am-thumbnail 类:也可以在 <img> 外面添加一个容器,如 <div>.<figure>.<a> 等,再将 class 添加到容器上. 2.结合网格使用: <div class="am-g"> <div class="am-u-sm-4"> &l…
amazeui学习笔记--css(常用组件13)--进度条Progress 一.总结 1.进度条基本使用:进度条组件,.am-progress 为容器,.am-progress-bar 为进度显示信息. <div class="am-progress"> <div class="am-progress-bar" style="width: 30%"></div> </div> <div cla…
amazeui学习笔记--css(常用组件12)--面板Panel 一.总结 1.面板基本样式:默认的 .am-panel 提供基本的阴影和边距,默认边框添加 .am-panel-default,内容放在 .am-panel-bd 里面. <div class="am-panel am-panel-default"> <div class="am-panel-bd">这是一个基本的面板组件.</div> </div>…
amazeui学习笔记--css(常用组件11)--分页Pagination 一.总结 1.分页使用:还是ul包li的形式: 分页组件,<ul> / <ol> 添加 .am-pagination class, 包含一系列 <li>. <ul class="am-pagination"> <li class="am-disabled"><a href="#">«</a&g…
amazeui学习笔记--css(常用组件10)--导航条Topbar 一.总结 1. 导航条:就是页面最顶端的导航条:在容器上添加 .am-topbar class,然后按照示例组织所需内容.<header class="am-topbar">导航条内容</header> 2.am-topbar模块下很多东西:am-topbar是命名空间加上模块名,所以肯定在模块下右很多东西,比如 <h1 class="am-topbar-brand"…
amazeui学习笔记--css(常用组件9)--导航nav 一.总结 1.导航基本使用:<ul> 添加 .am-nav class 以后就是一个基本的垂直导航.默认样式中并没有限定导航的宽度,可以结合网格使用.还是ul包li的形式. <ul class="am-nav"> <li class="am-active"><a href="#">首页</a></li> <l…
amazeui学习笔记--css(常用组件8)--列表list 一.总结 1.链接列表:就是多个链接在一起组成的列表, 使用 <ul> 结构嵌套链接列表,添加 .am-list.还是ui包着li的形式.<ul class="am-list">里面是各种含着a标签的li</ul> 2.文字截断:在 <a> 上添加 .am-text-truncate class 可以实现文字超出一行时截断为 ....这是在链接列表里面的文字截断. <u…
amazeui学习笔记--css(常用组件7)--输入框组Input-group 一.总结 1.使用:Input group 基于 Form 组件和 Button 组件扩展,依赖这两个组件.在容器上添加 .am-input-group,在标签文字上添加 .am-input-group-label 2.Icon组件及添加文字: <div class="am-input-group"> <span class="am-input-group-label"…
amazeui学习笔记--css(常用组件6)--图标Icon 一.总结 1.关注用法即可:在 HTML 上添加添加 am-icon-{图标名称} class. <span class="am-icon-weixin"> Wechat</span> 2.图标大小: .am-icon-sm,放大 150% .am-icon-md,放大 200% .am-icon-lg,放大 250% 3.icon button:在 Icon 上添加 .am-icon-btn cl…
amazeui学习笔记--css(常用组件5)--评论列表Comment 一.总结 1.am-comment:使用am-comment来声明评论对象,这个是放在article里面的,虽然article也是div来的 2.comment基本结构如下: <article class="am-comment"> <!-- 评论容器 --> <a href=""> <img class="am-comment-avatar…
amazeui学习笔记--css(常用组件4)--关闭按钮Close 一.总结 1.关闭按钮基本用法:关闭按钮样式,可以结合其他不同组件使用.对 <a> 或者 <button> 添加 .am-close class.<a href="#" class="am-close">×</a> 2.&times:关闭按钮用到的那个叉叉是&times,如果是icon font则不用 3.带边框样式:添加 .am-c…
amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏:将 .am-btn-group 放进 .am-btn-toolbar,实现工具栏效果. 3.按钮组大小:给 .am-btn-group 增加 class .am-btn-group-lg 或 .am-btn-group-sm 或 .am-btn-group-xs 改变按钮大小. 4.垂直排列: 使用…
amazeui学习笔记--css(常用组件2)--面包屑导航Breadcrumb 一.总结 1.am-breadcrumb:用am-breadcrumb来声明面包屑导航控件,.am-breadcrumb 面包屑导航. 2.breadcrumb形式:形式是ol里面内嵌li的形式 3.斜杠分隔符:默认分隔符是两个小大于号,斜杠分隔符的话要在ol中添加  am-breadcrumb-slash  <ol class="am-breadcrumb am-breadcrumb-slash"…
amazeui学习笔记--css(常用组件1)--小徽章Badge 一.总结 1.am-badge:添加am-badge来声明小徽章对象 <span class="am-badge am-badge-primary">2</span> 2.badge位置:badge可以放在span或者a标签中  <a class="am-badge am-badge-primary">Free</a> 3.圆角样式或者椭圆样式:am-…
如需转载,请注明出处:Flutter学习笔记(9)--组件Widget 在Flutter中,所有的显示都是Widget,Widget是一切的基础,我们可以通过修改数据,再用setState设置数据(调用setState()来通知框架,框架会再次调用State的构建方法来更新用户界面),Flutter会自动通过绑定的数据更新Widget,所以你需要做的就是实现Widget界面,并且和数据绑定起来. Widget分为有状态StatefulWidget和无状态StatelessWidget两种,在Fl…
SpringCloud学习笔记:服务支撑组件 服务支撑组件 在微服务的演进过程中,为了最大化利用微服务的优势,保障系统的高可用性,需要通过一些服务支撑组件来协助服务间有效的协作.各个服务支撑组件的原理可以参考我的之前一篇文章:微服务实践:服务治理. Spring Cloud提供的支持 Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里. Rib…
1.Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端. 原生NIO存在的问题 1) NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector.ServerSocketChannel.SocketChannel.ByteBuffer等. 2)需要具备其他的额外技能:要熟悉Java 多线程编程,因为NIO编程涉及到Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序. 3)开发工作量和难度都非常大:例如客户端面临断…
公司的一些项目采用了netty框架,为了加速适应公司开发,本博主认真学习netty框架,前一段时间主要看了看书,发现编程这东西,不上手还是觉得差点什么,于是为了加深理解,深入学习,本博主还是决定多动手,一方面记录一些总结性的思考性东西,另一方面也为日后复习查看留下一些东西. 那么废话少说,现在开始,首先在进入netty学习之前,我们是要认识一下IO并引出NIO的概念. 与IO相关的几种编程及特点分为: 编程类别 特点 传统BIO编程 典型的一请求一应答模型,一个请求新建一个线程,应答完成线程销毁…
学习圣思园Netty笔记,个人理解 2.netty宏观理解-本节内容: 1.阶段性事件驱动,一个请求分为若干阶段处理,每个阶段根据情况合理分配线程去处理,各阶段间通信采用异步事件驱动方式. 2.netty5废弃原因,ForkJoinPool使netty开发复杂且性能提升不高. 3.netty大纲深度解读--本节内容: 了解google protobuf:Protocol Buffers\thrift\http\websocket这些概念 书籍推荐netty in action 4.项目环境搭建秘…
在之前的Netty相关学习笔记中,学习了如何去实现聊天室的服务段,这里我们来实现聊天室的客户端,聊天室的客户端使用的是Html5和WebSocket实现,下面我们继续学习. 创建客户端 接着第五个笔记说,第五个笔记实现了简单的静态资源服务起,那么我们利用这个静态资源服务起为我们提供页面,创建一个socket.html页面,在这个页面中我们实现Socket连接,连接到我们的Netty搭建的聊天服务器上,因此我们需要创建一个聊天页面和Socket连接,这里我们假定Socket连接地址为 http:/…
本案例来源于<netty权威指南> 一.三大组件 Selector:多路复用器.轮询注册在其上的Channel,当发现某个或者多个Channel处于“就绪状态”后(accept接收连接事件.connect连接完成事件.read读事件.write写事件),从阻塞状态返回就绪的Channel的SelectionKey集合,之后进行IO操作. Channel:封装了socket. ServerSocketChannel:封装了ServerSocket,用于accept客户端连接请求: SocketC…
分类 父子组件通信 非父子组件通信 实现 父子 父子组件通信一般使用@Input和@Output即可实现,参考Angular4学习笔记(六)- Input和Output 通过Subject 代码如下: message.service.ts import { Injectable } from '@angular/core'; import {Subject, Observable} from 'rxjs/'; @Injectable() export class MessageService {…
NIO 概述 NIO有三个核心组件: 通道(Channels) 缓存(Buffers) 选择器(Selectors) 实际上,NIO的组件和类远不止这三个,但这个三个组件是核心.至于其它组件,例如Pipe和FileLock只不过是围绕在三大核心组件旁的实用工具类.因此,本文将重点关注这三个组件.其它组件也会在本系列其它相应的文章里介绍. 通道和缓存 在NIO里,所有IO都是从通道开始的.通道和流有点相似,可以将数据从通道读入缓存,也可以将数据从缓存写入通道,图示如下: 通道和缓存都有多种类型,下…