不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-08-19 17:42  分类:Java  编辑

粘包和拆包

产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。

作者:php-note.com  发布于:2018-11-13 14:25  分类:Java  编辑

Netty:option 和 childOption 参数设置说明

作者:php-note.com  发布于:2018-11-04 16:30  分类:Java  编辑

本节是本RPC网络传输的最后一个小节,讲解了Netty的部分,我之前已经讲过很多Netty的运用的基本知识了,也写过相关的博客讲述过这个模块,这边就不再赘述了

Netty的模块,主要就是一些TCP的参数设置,handlers链的设置,编码器和译码器的编写,关于RPC的编码器和译码器,我们之前就讲述过了,也不多说,请求响应,我们之前也详细描述过

虽然之前说过很多次,我还是没有理解Netty 高水位和地水位的那个问题,希望有大神给出不设置高水位和低水位会出现的问题的代码和讲解

作者:php-note.com  发布于:2018-10-17 00:01  分类:Java  编辑

因为我们选用的是Netty,写过Netty的或者有一点Netty基础的,我勉强算是Netty刚刚入门的菜鸟吧,都知道我们需要C/S端写一个编码器和译码器。

关于编码器和译码器,有很多种实现方式,没有优劣之分,只有在某种场景下,哪种方式更加适合用的说法,小到StringDecoder/StringEncoder,大到自定义协议的Decoder/Encoder,都会有其最最适合它的场景。我们这节就是要找一个最最适合RPC的编码器和译码器

作者:php-note.com  发布于:2018-10-03 16:34  分类:Java  编辑

为什么要有引用计数器

Netty里四种主力的ByteBuf,其中UnpooledHeapByteBuf 底下的byte[]能够依赖JVM GC自然回收;而UnpooledDirectByteBuf底下是DirectByteBuffer,如 Java堆外内存扫盲贴 所述,除了等JVM GC,最好也能主动进行回收;而PooledHeapByteBuf 和 PooledDirectByteBuf,则必须要主动将用完的byte[]/ByteBuffer放回池里,否则内存就要爆掉。所以,Netty ByteBuf需要在JVM的GC机制之外,有自己的引用计数器和回收过程。

一下又回到了C的冰冷时代,自己malloc对象要自己free。 但和C时代又不完全一样,内有引用计数器,外有JVM的GC,情况更为复杂。

作者:php-note.com  发布于:2018-10-02 01:31  分类:Java  编辑

本章节包括:

1)OIO-------阻塞IO传输服务

2)NIO-------异步IO传输服务

3)本地传输服务-----在JVM内异步的通信

4)嵌入式传输服务------测试你的ChannelHandlers

作者:php-note.com  发布于:2018-10-01 23:11  分类:Java  编辑

在接下来的几个小节中,我们将为你讲解Channel,EventLoop,ChannelFuture这几个组件的细节的讨论,这几个组件可以视为Netty网络模块抽象的几个典范

1)Channel-------关键字:Sockets

2)EventLoop-------关键字:控制流,多线程,并发

3)ChannelFuture-------关键字:异步通知

作者:php-note.com  发布于:2018-10-01 11:36  分类:Java  编辑

图2.1展示了我们即将要编写的Netty服务器端和客户端的俯瞰图,如果你是一个专注于web开发的开发者我想你还是很熟悉的,你应该会对Netty服务器端和客户端的模型有着更深的完整理解。

作者:php-note.com  发布于:2018-09-23 19:31  分类:Java  编辑

在这个章节,我们将向你展示如果构建一个基于Netty的客户端和服务端,编写的例子很简单------客户端发送信息到服务器端,服务器端将信息原样返回,这个实战例子很重要,这这么两个原因:

 1)这个例子首先需要搭建你的开发环境,并且验证你的开发环境是否可用,当然,如果你打算我们列举的例子应用到你的项目之中做好准备,这也是很重要的

 2)你将获取亲手实践Netty的经验,感受前一章节我们讲述的:用ChannelHandlers去构建你的逻辑应用,这将为你在第三章的深入学习Netty打好良好的基础

作者:php-note.com  发布于:2018-09-23 17:32  分类:Java  编辑

 在这个章节中,我们将浅析Netty的几个核心组件

  1)Channels

  2)Callbacks

  3) Futures

  4) Events and handlers

 

这些构建模块代表了不同的结构种类:资源,逻辑,和通知,你的应用可以使用这些连接到网络,并且通过这些这些获取到数据流

对于每一个组件而言,我们将给一个最基本的定义,并且给出一个合适简单的例子说明它的作用

作者:php-note.com  发布于:2018-09-23 17:09  分类:Java  编辑

在我们准备研究Netty之前,请先查看一下我们下表1.1总结出来的Netty的核心特性,有些是技术方面的,有些是架构层次或者是宏观上的设计,在这本书里我们将要多次讲解分析这些特性,表1.1

类别 Netty特性实现
设计 为多种网络传输类型提供统一的APIs,包括阻塞IO和非阻塞IO
简单但高效的线程模型
真实的无连接的数据包socket的支持
逻辑组件通过链接的链式方式使用,使每个组件可以重复使用
易用性 丰富的JAVA文档和大量的代码示例
仅仅依赖于JDK1.6,部分特性可能需要依赖JDK1.7或者其他的额外jar包
性能 有更大的吞吐量和低延迟性相比于直接使用JAVA 的原生APIs
引用了池的概念和重复利用的理念来减少资源的消耗
最大限度的减少内存拷贝
健壮性 不会因为连接的缓慢,连接的损耗产生OOM
在优质的网络环境中消除Netty应用的不公平的读写比
安全性 完成对SSL\TLS和StartSSL的支持
可以在Applet或者OSGI等这些受限制的环境中运行
社区驱动 社区成立早,且活跃度高,版本更新频繁
作者:php-note.com  发布于:2018-09-23 16:34  分类:Java  编辑

假如你正在为一个大型公司开发一个全新的具有历史意义的使命级的应用,在第一个会议上你了解到这个系统必须无损且高效地支持150000用户并发使用,所有人的眼光都注视着你,你打算怎么说?

如果你自信地说:“可以,没有问题”,所有人将会对你脱帽致敬,但是大多数的我们都会谨慎地去思考。比如去思考可执行性,接着你会拿着一台电脑,然后去搜索“高性能的java网络编程”

 

如果你今天搜索这样的关键词,大概下面的第一个结果就是你将看见的:

作者:php-note.com  发布于:2018-09-23 15:17  分类:Java  编辑

Netty是一个致力于创建一个高性能的网络应用的先进的框架,在这个部分,我们将向你展示netty的性能,并从以下三点向你证明

1)你不需要以专业网络专家的身份用Netty去构建网络应用

2)使用Netty可以比直接使用java原生的API更加简单地去开发应用

3)Netty的设计理念和设计实例都很棒,例如netty使你的应用上逻辑上与网落层解耦,让你无需花费更多的时间去关心网络层

作者:php-note.com  发布于:2018-09-23 15:11  分类:Java  编辑

这段时间一直学习Netty,发现文档比较少,国内也只有李林峰大师的两本权威指南,写的很棒,正在拜读,不过感觉不是很适合新手入门,还有一本就是Manning版本的《Netty in Action》的英文文档,下载地址

http://download.csdn.net/detail/linuu/9487368

作者:php-note.com  发布于:2018-09-23 15:06  分类:Java  编辑
作者:php-note.com  发布于:2018-09-17 11:57  分类:编程基础/Web安全  编辑
作者:php-note.com  发布于:2018-04-12 22:55  分类:Java  编辑