从0开始学DX Mesh第三天--使用xComPython组件搭建Helloworld工程
组织介绍
DigQuant Technology点宽科技开源项目:
Direct Exchange Mesh (DX Mesh) for Web 3.0 - 面向 Web3.0 的分布式应用架构
历史沿袭
DX Mesh是由DQtech团队提出的“RPC网络+区块链网络“的双层网络设计思路,在此设计概论基础上,DX Mesh项目进行了大胆的设计,一个新的”Dual Network Architecture(DNA)“网络结构被提出。
开源项目链接:https://gitee.com/DXmesh
xComPythonLib组件简介
xComPythonLib是什么(具体信息见:https://gitee.com/DXmesh/xComPythonLib/blob/dev/README.md)
是xComPythonLib是 DXMesh 应用组件 DXC(DXMesh Componet),开发库。将 xPort 注入的接口,封装成 Rust 的 async 接口。提供 async 运行时,以及将 Common 接口导出给 DXC 使用。
xComPython组件搭建HelloWorldService工程
整体思路
一、启动xPort服务(用127.0.0.1:8090的监听端ip监听127.0.0.1:8091的服务端ip)。
二、服务端ip向xPort发送连接HelloWorldService工程的请求,xPort接收服务端ip的请求。
三、监听端ip从xPort接收服务端ip请求并且启动HelloWorldService工程反馈给xPort,xPort接收监听端ip的反馈并且传输给服务端ip。
四、服务端ip向xPort发送调用HelloWorldService工程SayHello接口并且向"name"传入参数的请求,xPort接收服务端ip的请求。
五、监听端ip从xPort接收服务端ip请求并且把HelloWorldService工程SayHello接口内容反馈给xPort,xPort接收监听端ip的反馈并且传输给服务端ip.
前期准备
需要搭建好之前的DX Mesh环境并能够成功启动xPort监听(前期搭建环境见:https://blog.csdn.net/YJZ555/article/details/134090421?spm=1001.2014.3001.5501)
第一步–Python环境搭建
首先进入xComPythonLib文件夹,在终端运行以下命令创建虚拟环境(这个虚拟环境会copy你本地python环境的所有库):
python -m venv venv
会生成一个venv的文件夹,然后在终端运行以下命令进入虚拟环境:
.\venv\Scripts\activate
第二步–项目搭建
首先在xComPythonLib文件夹下创建一个项目文件,然后进行该文件夹,运行以下命令:
mkdir xxx
可以看到,生成了yjz的文件夹
然后运行以下命令创建一个DX Mesh工程,这里以HelloWorldService为例子:
xbuilder new -n HelloWorldService
可以看到,生成了source_api_0_0_1.proto的文件:
然后运行以下命令初始化编程语言(这里是python语言为例子,具体信息见:https://gitee.com/DXmesh/xComPythonLib/blob/dev/README.md):
xbuilder init -l py
可以看到,生成了src的文件夹,里面有需要编程的python文件和接口:
然后打开./xComPythonLib/yjz/src/service.py,编写python代码,我这里打印了运行的日志,并且给source_api.HelloReply接口传递了"hello world"的信息输出,代码如下:
# SayHello
async def say_hello(self, ctx: xport_core.Context, param: source_api.Hello) -> source_api.HelloReply:
#raise NotImplementedError("未实现 say_hello")
logger.info("name = {}123".format(param.name) )
reply = source_api.HelloReply()
reply.greeting = "hello world"
#reply.greeting = "hello yjz,现在就回家!"
return reply
# EmptyParamAndReply
# async def empty_param_and_reply(self, ctx: xport_core.Context):
# raise NotImplementedError("未实现 empty_param_and_reply")
然后对修改的文件进行保存,然后运行以下命令对工程进行打包:
xbuilder pack
可以看到,生成了HelloWorldService_0_0_1.dxc文件和import_api_HelloWorldService_0_0_1.proto文件:
然后运行以下命令打包HelloWorldService_0_0_1.dxc(其中D:\DXMesh\xPort为你本地xPort文件夹所在位置):
xbuilder install -x D:\DXMesh\xPort
可以看到,HelloWorldService_0_0_1.dxc文件已经被安装到了D:\DXMesh\xPort\dxc路径下:
第三步–使用xPort测试HelloWorldService工程
首先创建一个新终端进入xPort文件夹内,运行以下命令开启xPort的监控服务:
cargo run
以下是我电脑下的例子:
可以看到,监听端ip(127.0.0.1:8090)已经通过xPort成功监听到服务端ip(127.0.0.1:8091):
然后启动postman运行以下命令,用服务端ip向xPort发送连接HelloWorldService工程的请求(这里用的是调试模式的接口调用):
{
"dxc_name":"XComService",
"dxc_version":"0.0.1",
"service_name":"XComService",
"api":"LoadService",
"params":{
"dxc_name":"HelloWorldService",
"dxc_version":"0.0.1",
"service_name":"HelloWorldService",
"only_build_ipc": true
}
}
可以看到,xPort已经接收到服务端ip申请启动HelloWorldService工程的请求并且反馈给监听端ip:
然后在原先的工程路径运行以下命令,监听端ip启动HelloWorldService工程:
python src/lib.py --dxc-name="HelloWorldService" --dxc-version="0.0.1" --service-name="HelloWorldService" --log-level="debug" --sgement-id=1
可以看到,xPort已经成功接收到监听端ip启动HelloWorldService工程的所有连接节点:
可以看到,xPort也把监听端ip成功启动HelloWorldService工程的结果反馈给了服务端ip:
接下来,运行以下命令,我使用服务端ip调用HelloWorldService的SayHello接口并给name传入了“111”发送给xPort:
{
"dxc_name":"HelloWorldService",
"dxc_version":"0.0.1",
"service_name":"HelloWorldService",
"api":"SayHello",
"params":{
"name":"111"
}
}
可以看到,xPort把“111”字符串从服务端ip接收,并传输到监听端ip的HelloWorldService工程的name参数输出:
可以看到,xPort也从监听端ip的HelloWorldService工程里面接收"hello world"字符串并且传输服务端ip:
欧克,到这里你已经成功使用DX Mesh搭建了一个Helloworld工程,并使用xPort进行两个ip端口之间的相互通信,完成两个端口之间搭建工程的过程。
第四天预告
使用DX Mesh的发行版进行环境搭建和功能测试。
DX Mesh已经正式发布xPort-v0.1.4-alpha发行版,可以减少前期环境搭建的工作!!!
若对DX Mesh架构和实操过程中有任何问题,可评论、私信、邮箱或者加下列微信和我一起探讨学习(我的邮箱:2195745704@qq.com):