Corda是什么?

  1. Corda is an open-source blockchain platform.
  2. 节点与节点之间通过RPC调用,最终完成一个分布式账本。
    Corda中如何使用Netty?

Corda使用Netty概况

  1. 总览
    Corda中如何使用Netty?
    说明

    1,采用主从模式。

    2,使用NioServerSocketChannel::class.java反射方式创建channel实例。创建channel实例过程理解

    3,为workerGroup添加handler,也就是添加业务handler。

    4,绑定ip和port,启动服务。

  2. pipeline

Corda中如何使用Netty?说明

1, 继承Netty的ChannelInitializer < SocketChannel>()

2, 重写initChannel()这个方法,这是一个中介,当它把handler添加到pipeline中,会把自己给移除掉。这里添加Netty自带的SslHandler到pipeline中。

3,添加AMQPChannelHandler()到pipeline中。

sslHandler说明
Corda中如何使用Netty?
A:TLS的版本(TLSV1.2)
B: 签名套件
C:SslHandler是Netty提供的Handler,开箱即用。

AMQPChannelHandler说明

重写userEventTriggered方法
Corda中如何使用Netty?
createAMQPEngine(ctx)
Corda中如何使用Netty?
A:EventProcessor类继承了开源工具proton-j提供的BashHandler类。并重写相应的核心方法。gradle构建:compile “org.apache.qpid:proton-j:0.21.0”
B:先传播,然后异步处理事件(这里处理的方式是交给proton-j去处理执行的,线程池是channel.eventLoop(),也就是workerGroup那个线程池执行业务逻辑的)

channelRead0()

Corda中如何使用Netty?
A: 交给proton-j处理消息,比如粘包和拆包问题的解决。

B: 防止Netty的内存泄漏。

C:使用Netty的workerGroup提供的线程池执行业务逻辑handler()

  1. 线程模型

    主从模式,bossGroup一个线程,workerGroup程序写死4个线程。


Corda使用Netty的一些技巧

  1. 使用Proton-j开源工具(移除handler,而不是在事件触发或者channalRead0()方法中移除)
    从上面的 AMQPChannelHandler说明 ,我们了解到,当Corda判断事件类型是SslHandshakeCompletionEvent,并且执行成功后,无论是在userEventTriggered方法还是channelRead方法,我们都没有看见Corda移除该handler。
    Corda中如何使用Netty?
    Corda中如何使用Netty?
    Corda中如何使用Netty?

  2. 如何解决TCP的粘包和拆包问题。

在pipeline中,我们没有看见Corda使用一次编解码和二次编解码,那它又是怎么处理这些问题的呢?
数据的序列化,(编码)完全交接Proton-j来进行。

处理输入数据
Corda中如何使用Netty?
处理输出数据
Corda中如何使用Netty?


Corda使用Netty可以优化的地方

  1. 执行Corda业务逻辑的线程池,是workerGroup中的线程池。这里完全可以使用一个新的线程池来执行业务逻辑。
  2. Corda的最大等待连接数是100。 可以设置得更大,比如1024。
  3. 没有设置读写空闲。

相关文章:

  • 2022-02-20
  • 2022-12-23
  • 2021-12-21
  • 2021-07-16
  • 2021-05-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-16
  • 2021-11-14
  • 2021-07-05
  • 2021-11-13
  • 2022-03-02
  • 2021-07-03
相关资源
相似解决方案