不灭的焱

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

作者:php-note.com  发布于:2018-10-27 13:03  分类:Linux软件安装/优化 

编译 Nginx

#安装依赖库
sudo apt-get -y install libpcre3 libpcre3-dev
sudo apt-get -y install libssl-dev openssl libcurl4-openssl-dev
sudo apt-get -y install build-essential libtool
 
#安装pcre库
cd /alidata/tmp/deepin-sdk/source2/nginx
sudo tar -xzvf ./pcre-8.36.tar.gz
cd ./pcre-8.36
sudo ./configure
sudo make && sudo make install
作者:php-note.com  发布于:2018-10-26 10:24  分类:电脑/软件使用 

在深度商店里面的“火狐国际版”,版本比较老,自定义安装下最新版本了!!

一、下载最新软件包

https://www.mozilla.org/en-US/firefox/all/

二、解压到指定目录

移动到安装目录,如 /alidata/server/firefox

作者:php-note.com  发布于:2018-10-25 14:42  分类:电脑/软件使用 

Build2016开发者会后Windows10系统版本,就开始原生支持Linux Bash命令行支持。用户现在即使不使用Linux系统或Mac电脑就可以在Win10上使用Bash,那么Win10系统上如何开启Bash命令行功能呢?

作者:php-note.com  发布于:2018-10-23 00:36  分类:Java基础 

SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,

而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可) 公司内部,目前Dubbo框架就基于SPI机制提供扩展功能,再比如tomcat,动态实现了ServletContext接口。

""

作者:php-note.com  发布于:2018-10-20 23:49  分类:Java基础 

static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:

  1. 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;
  2. 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;
  3. 静态块用法(里面的代码只会被执行一次),将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键;
  4. 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便;
作者:php-note.com  发布于:2018-10-20 00:31  分类:电脑/软件使用 

1、在项目根目录下,新建文件 pom.xml,并填写好内容。

2、在pom.xml文件上,右键 Add as Maven Project
     或 在项目上,右键 Add Framework Support

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

ReplayingDecoder 和ByteToMessageDecoder 最大的不同就是ReplayingDecoder 允许你实现decode()和decodeLast()就像所有的字节已经接收到一样,不需要判断可用的字节,举例,下面的ByteToMessageDecoder 实现:

public class IntegerHeaderFrameDecoder extends ByteToMessageDecoder {

    @Override
   protected void decode(ChannelHandlerContext ctx,
                           ByteBuf buf, List<Object> out) throws Exception {

     if (buf.readableBytes() < 4) {
        return;
     }

     buf.markReaderIndex();
     int length = buf.readInt();

     if (buf.readableBytes() < length) {
        buf.resetReaderIndex();
        return;
     }

     out.add(buf.readBytes(length));
   }
 }
作者:php-note.com  发布于:2018-10-17 00:12  分类:Java库/系统 

说到序列化,这在RPC的层面上也是很重要的一个环节,因为在我们的业务层面,你传输的一个对象,是一个Object,不过在网络上,却不管你传输的是Obj1,还是Obj2,网络只认byte,所以在代码层面上,如何将对象转化成byte数组,和如何将byte数组反序列化层对象,这也是很重要的,直接影响你的整个框架的性能。

作者: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:51  分类:Java基础 

现在N多RPC框架应该选用的都是Netty,基于多种原因吧:

1)它很容易上手,它封装了网络传输底层的实现,但也有Spring的开闭原则,可以根据用户的参数配置去定制属于自己的网络传输模型

2)它优化了线程模型,且基于事件驱动,基于NIO,提高IO效率

3)内存优化,直接内存的使用/池化的技术

4)第四点,我也是认为很重要的一点,也是我们写这个RPC框架的核心点,就是有很多参考,基于Netty的成熟的生产级别的代码可以参考(本RPC框架的网络模块netty应用是融合Jupiter和RocketMQ的),说白了,有点抄袭,但也是做了部分的修改