目录 简介 配置SslContext 客户端的handler 使用Http2FrameCodec Http2MultiplexHandler和Http2MultiplexCodec 使用子channel发送消息 总结 简介 在之前的文章中,我们实现了支持http2的netty服务器,并且使用支持http2的浏览器成功的进行访问.虽然浏览器非常通用,但是有时候我们也需要使用特定的netty客户端去和服务器进行通信. 今天我们来探讨一下netty客户端对http2的支持. 配置SslContext…
目录 简介 多路复用的基础 多路复用在server端的使用 配置TLS处理器 配置clear text upgrade 总结 简介 在之前的文章中,我们提到了在netty的客户端通过使用Http2FrameCodec和Http2MultiplexHandler可以支持多路复用,也就是说在一个连接的channel基础上创建多个子channel,通过子channel来处理不同的stream,从而达到多路复用的目的. 既然客户端可以做到多路复用,同样的服务器端也可以,今天给大家介绍一下如何在netty…
[读后感]Netty 系列之 Netty 高性能之道 - 相比 Mina 怎样 ? 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. [读后感] 不知道这是什么节奏,或许人家早就春意盎然了.仅仅是…
你好,我是彤哥,本篇是netty系列的第三篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/AIO. 本文将介绍Java中这三种IO的进化史,并从使用的角度剖析它们背后的故事. Java BIO BIO概念解析 BIO,Blocking IO,阻塞IO,它是Java的上古产品,自出生就有的东西(JDK 1.0). 使用BIO则数据准备和数据从内核空间拷贝到用户空间两个阶段都是阻塞的. BIO使用案…
你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先,我想说的最重要的一个点是,学习NIO思维一定要从BIO那种一个连接一个线程的模式转变成多个连接(Channel)共用一个线程来处理的这种思维. 1个Connection = 1个Socket = 1个Channel,这几个概念可以看作是等价的,都表示一个连接,只不过是用在不同的场景中. 如果单从阻塞…
--日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第七篇. 简介 上一章我们一起学习了Java NIO的核心组件Buffer,它通常跟Channel一起使用,但是它们在网络IO中又该如何使用呢,今天我们将一起学习另一个NIO核心组件--Selector,没有它可以说就干不起来网络IO. 概念 我们先来看两段Selector的注释,见类java.nio.channels.Selector. 注释I A multiplexor of {@link SelectableChannel}…
Netty系列之Netty高性能之道 https://www.infoq.cn/article/netty-high-performance 李林锋 2014 年 5 月 29 日 话题:性能调优语言 & 开发架构   1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用 Netty4 + Thrift 压缩二进制编解码技术,他们实现了 10W TPS(1K 的复杂 POJO 对象)的跨节点远程服务调用.相比于传统基于 Java 序列化 +BIO(同步阻塞 IO)的通信…
Netty 系列(三)Netty 入门 Netty 是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.更多请参考:Netty Github 和 Netty中文入门. 一.获得 Netty 可以通过Maven安装Netty.查看Netty之HelloWorld快速入门,更多API <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</art…
Netty源码分析第一章:Netty启动流程   第四节:注册多路复用 回顾下以上的小节, 我们知道了channel的的创建和初始化过程, 那么channel是如何注册到selector中的呢?我们继续分析 回到上一小节的代码: final ChannelFuture initAndRegister() { Channel channel = null; try { //创建channel channel = channelFactory.newChannel(); //初始化channel i…
你好,我是彤哥,本篇是netty系列的第二篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别. 何为IO模型 对于一次IO操作,数据会先拷贝到内核空间中,然后再从内核空间拷贝到用户空间中,所以一次read操作,会经历两个阶段: (1)等待数据准备 (2)数据从内核空间拷贝到用户空间 基于以上两个阶段就产生了五种不同的IO模式. 阻塞IO 从进程发起IO操作,一直等待上述两个阶段完成. 两阶段一起阻塞…
本文首发于微信公众号[猿灯塔],转载引用请说明出处 接下来的时间灯塔君持续更新Netty系列一共九篇 当前:Netty 源码解析(一)开始 Netty 源码解析(二): Netty 的 Channel Netty 源码解析(三): Netty 的 Future 和 Promise Netty 源码解析(四): Netty 的 ChannelPipeline Netty 源码解析(五): Netty 的线程池分析 Netty 源码解析(六): Channel 的 register 操作 Netty…
Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明 作者: Grey 原文地址: 博客园:Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明 CSDN:Netty 学习(六):创建 NioEventLoopGroup 的核心源码说明 基于 JDK 的 API 自己实现 NIO 编程,需要一个线程池来不断监听端口.接收到新连接之后,这条连接上数据的读写会在另外一个线程池中进行. 在 Netty 实现的服务端中, 有如下经典代码 Event…
经过昨天2dtoolkit系列教程一的推出,感觉对新手还有有一定的启发作用,引导学习使用unity 2dToolKit插件的使用过程,今天继续系列二——动画精灵的创建,以及背景图的无限循环滚动,在群里总是看到什么技术好,什么技术不好,新手永远迷惑是学C#呢还是学java呢,是cocos2d呢还是unity呢,总想着什么比较火,其实没必要这样,让自己选择两难,每个人都有选择困难症,也不要想一口吃掉一个大饼,想贪图取巧,说不定别人跟你说什么什么技术比较火,但也就是目前,等到你一个新手学成的时候,说不…
Intellij Idea系列之JavaSE项目的创建(一) 一.Intellij Idea于 Intellij Idea是捷克的Jetbrain公司的一款优秀的针对Java程序员的IDE,其自从问世以来备受广大Java程序员的喜爱,并从Eclipse这款优秀的IDE中抢夺了部分的用户,而且还是收费软件,可想而知Intellij的强大之处.但是该IDE对于刚入门的尤其是已经习惯了Eclipse的Java程序员来说,会感觉到很多的不适应,无论是从页面风格.项目的搭建.快捷键的使用会有诸多的不适应,…
原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从纯理论的角度对依赖注入进行了深入论述,为了让读者朋友能够更好地理解.NET Core的依赖注入框架的设计思想和实现原理,我们创建了一个简易版本的DI框架,也就是我们在前面文章中多次提及的Cat.我们会上下两篇来介绍这个被称为为Cat的DI框架,上篇介绍编程模型,下篇关注设计实现.[源代码从这里下载]…
一.概念 网络传输的单位是字节,如何将应用程序的数据转换为字节,以及将字节转换为应用程序的数据,就要说到到我们该篇介绍的编码器和解码器. 将应用程序的数据转换为网络格式,以及将网络格式转换为应用程序的数据的组件分别叫作编码器和解码器,同时具有这两种功能的单一组件叫作编解码器. Netty 提供了一系列用来创建所有这些编码器.解码器以及编解码器的工具,还可以按需定制通用的消息转换编解码器. Netty 的编(解)码器实现了 ChannelHandlerAdapter,也是一种特殊的 Channel…
一.概述和原理 网络数据传输的基本单位总是字节,Netty 提供了 ByteBuf 作为它的字节容器,既解决了 JDK API 的局限性,又为网络应用程序提供了更好的 API,ByteBuf 的优点: 1.可以被用户自定义的缓冲区类型扩展2.通过内置的复合缓冲区类型实现了透明的零拷贝3.容量可以按需增长4.在读和写这两种模式之间切换不需要调用 ByteBuffer 的 flip()方法5.读和写使用了不同的索引6.支持方法的链式调用7.支持引用计数8.支持池化 ByteBuf通过两个索引(rea…
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下mongodb基础玩法系列二CURD附加一 简单说几句 在mongodb中3元素:db(数据库).collection(集合).document(文档) 其中collection类似于数据库中的表,document类似于行,这样一来我们就将内容对比起来记忆学习了. 数据格式 MongoDB docu…
Netty 系列目录 二 Netty 源码分析(4.1.20) 1.1 Netty 源码(一)Netty 组件简介 2.1 Netty 源码(一)服务端启动 2.2 Netty 源码(二)客户端启动 3.1 Netty 源码(一)ByteBuf 4.1 Netty 源码 Channel(一)概述 4.2 Netty 源码 Channel(二)核心类 5.1 Netty 源码 NioEventLoop(一)初始化 5.2 Netty 源码 NioEventLoop(二)Channel 注册 5.3…
Netty系列(四)TCP拆包和粘包 一.拆包和粘包问题 (1) 一个小的Socket Buffer问题 在基于流的传输里比如 TCP/IP,接收到的数据会先被存储到一个 socket 接收缓冲里.不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列.即使你发送了 2 个独立的数据包,操作系统也不会作为 2 个消息处理而仅仅是作为一连串的字节而言.因此这是不能保证你远程写入的数据就会准确地读取.举个例子,让我们假设操作系统的 TCP/TP 协议栈已经接收了 3 个数据包: 由于基于流传输…
Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现由返回结果的多线程. 线程是 CPU 调度的最小单位. 一.继承 Thread 类创建线程类 public class MyThread extends Thread { public void run() { for (int i = 0; i < 10000; i++) { System.ou…
你好,我是彤哥,本篇是netty系列的第一篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文主要讲述netty系列的整体规划,并调查一下大家喜欢的学习方式. 知识点 netty系列彤哥准备分成三个大的模块来完成: 入门篇 入门篇主要讲述一些必备的基础知识,例如IO的五种模型.BIO/NIO/AIO如何演进.Java nio的使用及组件介绍.netty的使用及组件介绍. 实战篇 实战篇主要讲述几个netty的实战案例,这里列了四个,netty实现RPC框架.netty实现ht…
你好,我是彤哥,本篇是netty系列的第四篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们一起学习了Java中的BIO/NIO/AIO的故事,本章将带着大家一起使用纯纯的NIO实现一个越聊越上瘾的"群聊系统". 业务逻辑分析 首先,我们先来分析一下群聊的功能点: (1)加入群聊,并通知其他人: (2)发言,并通知其他人: (3)退出群聊,并通知其他人: 一个简单的群聊系统差不多这三个功能足够了,为了方便记录用户信息,当用户加入群聊的时候自动给他分配…
--日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第六篇. 简介 上一章我们一起学习了Java NIO的核心组件Channel,它可以看作是实体与实体之间的连接,而且需要与Buffer交互,这一章我们就来学习一下Buffer的特性. 概念 Buffer用于与Channel交互时使用,通过上一章的学习我们知道,数据从Channel读取到Buffer,或者从Buffer写入Channel. Buffer本质上是一个内存块,可以向里面写入数据,或者从里面读取数据,在Java中它被包装成了…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP BAPI_REQUISITION_CREATE创建采购申请   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 最近一个开发,在eban里追加了字段, 调用bapi赋值总是赋不进去 后来发现找的结构名称不对, 是:BAPI_TE_REQUISITION_ITEM 不是BAPI_TE_…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP ECLIPSE中创建ABAP项目失败原因解析   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 当你在eclipse中安装好ABAP插件后 很想体验一把在eclipse中开发abap代码 但是,创建abap项目,如果报下面的错 "Logon to system ERD failed (Sys…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP ECLIPSE中创建ABAP项目的步骤   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 因为我看到很多人都问过关于Eclipse的ABAP开发工具的问题.所以写了这篇配置. 在Eclipse中可以采取不同的方法来引入ABAP开发工具. 1.  首先要把eclipse安装上,去官网下载ecl…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS创建XSJOB后台执行   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 详细配置等有时间在写(这一篇文章我在公众号里写了最详细的解析) 代码截图如下: 因为之前比较忙,没来得及解释一下这个XSJOB的参数 现在补充一下xscron的参数: "xscron": &qu…
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP SD模块-创建供应商主数据BAPI   前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 关于创建供应商主数据BAPI:SD_CUSTOMER_MAINTAIN_ALL的一点解释 as it has the same parameters, I have checked the code and c…
Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.refreshBeanFactory创建过程 知识点归纳 博客前言介绍 提示:在上一章的学习中,我们简单了解了Spring IoC容器启动初始化的主流程,不过并没有详细解释,因为代码比较复杂,没有做长篇大论,所以本文接着学习BenFactory的创建过程,学习源码建议带着疑问去学,一点点跟,时间积累之…