不灭的焱

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

作者: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-16 23:46  分类:Java库/系统 

Maven的多模块项目搭建还是比较方便的,结构清晰,模块依赖明确,很适合用来作为开发RPC的开发架构,我们开发的RPC起一个名字,因为大学一直酷爱魔兽,喜欢魔兽解说xiaoy,他有一个别名叫做laopopo,所以我就没多想,就起了一个名字叫做laopopo-rpc,名字蹩脚了一点,不过不重要,明朝开国皇帝朱元璋真名叫朱重八,老爸叫做朱五四,他依旧做了皇帝,所以英雄不问姓名~ 虽然我写的也不是英雄,个人兴趣~

作者:php-note.com  发布于:2018-10-16 23:41  分类:Java库/系统 

RPC 技术出来很多年了,出来的时候我估计还刚刚上大学,在国内,dubbo应该算是先驱者吧,下面的图更是RPC架构经典中的经典

作者:php-note.com  发布于:2018-10-16 23:30  分类:Java库/系统 

本来只是想写一写,学一学的,不过觉得还是应该跟大家一起分享一下一个完整的在我知识体系中相对健全的RPC框架

写这个RPC的时候,我是写过一个的RPC的,其实不能称之为写,算抄吧,看过别人写的RPC,也无脑的抄了一遍别人的代码,抄完之后,问了冯大神,感觉收获很多,比每天看书看帖收获多得多

作者:php-note.com  发布于:2018-10-14 11:19  分类:Java库/系统 

在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上implements Serializable接口去实现序列化,我想说的是这种方式在小系统中尚且可以用一用,如果是并发很大的系统会受到严重影响,这是由于JDK自带的序列化效率很低,不论是时间上还是空间上。我们经常使用的序列化方式还有XML和Json,说实在的我更多的是使用Json,我觉得它很方便很友好,但这些都不够好,我今天要将的是google开发的开源的序列化方案protocol buffer(简称protobuf),它的好处很多,独立于语言,独立于平台,最最重要的是它的效率相当高,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一。

作者: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-03 14:14  分类:Java库/系统 

在执行 mvn clean test 时报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project hello: Compilation failure: Compilation failure:
[ERROR] /D:/mavenWork/src/test/java/com/clc/helloworld/test/TestHelloworld.java:[2,17] 程序包org.junit不存在
[ERROR] /D:/mavenWork/src/test/java/com/clc/helloworld/test/TestHelloworld.java:[4,10] 找不到符号
作者: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服务器端和客户端的模型有着更深的完整理解。