zoukankan      html  css  js  c++  java
  • 源码分析(二) 进程间通信机制

    注:EOS代码版本:4.0

    一.EOS进程的基本介绍:

    EOS项目中主要包括nodeos,cleos,keosd这三个进程,各自的交互大抵如下:
     
    nodeos: 节点运行的进程。通信包括两个方面:
    • 节点与节点的通信,主要为数据的同步。
    • 节点与cleos的通信。
    cleos: EOS客户端进程。主要通信包括两个方面:
    • cleos与nodeos通信,主要从节点上获取区块,帐户,钱包金额等等;
    • cleos与keosd通信,用来管理本地钱包。
    keosd: 本地钱包进程管理。提供钱包管理的操作及api接口。
    • keosd只与cleos通信,用于管理钱包。
     
    来一图,简单明了!数据的具体交互如下图所示,
     
     
     
    程序开启的顺序信息:
    • cleos第一次运行的时候会将keos带起来运行,而nodeos需要单独开启运行。
    • 三个程序都可以带很多命令参数,也有自己的单独配置文件。
    • keosd运行后可以看做是一个http服务器,nodeos也创建了一个http服务器。cleos建立客户端分别与keosd与nodeos进行通信 ,流程在源码分析中做出解释。
    综上所述:三个进程均可以单独开启。keosd也可以由cleos带起来,唯一的原则是cleos客户端,另外两个是服务器,注意一下IP的配置即可。
     

    二.源码赏析

    1. 钱包管理进程keosd
     
    查看源码,一切从源头main开始,keosd的main函数中,开头自行阅读,无非是配置文件的创建或者加载,不理它,看关键处:
     
    很明显,加载三个插件wallet_plugin, wallet_api_plugin, http_plugin,命名也很规范。三个插件的加载这里不打开了,主要包括插件的初始化,运行,停止三个操作,很简单。打开观察三个插件浏览跟踪下,就会发现wallet_manager这个类了,它提供了钱包的所有操作的api函数,包括钱包的创建,密匙导入,公匙查询,加锁解锁,私匙签名等等。
     
     
    但是,我们创建一个名为hml的钱包用的命令是:cleos wallet create -n hml。
     
    So问题来了,cleos和keosd是如何协作通信创建一个本地钱包的?话不多说,它的核心加载在wallet_api_plugin的实现 中,直接上代码流程:
    瞧一瞧,看不懂,继续展开CALL,
     
    发现有点晕,仔细分析下,大致意思:
     
    (1) 形成了一个/v1/wallet/函数名 的字符串,然后是调用钱包的api函数,再然后是注册了一个回调函数,把api函数运行的结果放在了这个回调函数中;
     
    (2)整个过程使用了json格式的数据转换;
     
     
     
    还不够:
     
     
     
    最后定义在此处,把形成的字符串与钱包的api构成key-value的形式
     
     
    那最后这个map的调用呢?代码说明一切,看这里:
     
     
    这里的接口是keosd的http接收数据的地方,在进行json数据转换及数据有效性验证后,调用api函数并返回数据。
     
    举例表示:cleos wallet create //会创建一个名为defaut的钱包
     
    在cleos的源码调用如下:
     
    使用的直接调用CALL,这里的CALL实现如下:
     
     
    cleos真正发送数据的接口
     
    cleos会向wallet_url变量的地址发送数据(已转换成json格式),keosd的http收到会进行验证,解析,调用wallet的api,再回转返回数据,形成一套完整的数据通信到此完成。
     
    最后,我们看一下接口的定义,所有cleos需要的数据接口函数如下,如此便清晰明了。
     
    流程其实很简单,整个流程其实从下往上看或许更好^_^,另外备注几点:
     
    • cleos与keosd,cleos与nodeos的通信都使用http的协议加上json格式进行的;
    • 数据格式主要用到fc里的类库进行转换;
    • keosd返回数据的回传流程那里我没有往下看了,有兴趣的可以看下。
  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/hbright/p/9235067.html
Copyright © 2011-2022 走看看