.. | ||
etc | ||
include | ||
priv | ||
src | ||
.gitignore | ||
license | ||
README.md | ||
rebar.config |
一:竞赛流程
请说明本赛项的赛程设置、阶段划分及时间安排等。
二:大赛联系人邀请
1: 邀请参赛选手加入私仓
三:大赛参赛选手加入
1:点击右上角邮箱查看邀请信息
2:查看邀请信息详情
3:接受邀请
4:查看私仓点击个人令牌
5:创建个人令牌
6:保存个人令牌
四:开发环境
1:开发常见工具列表
linux/erlang | windows/erlang | Putty | winscp | BCompare | idea |
---|---|---|---|---|---|
linux | windows | putty | winscp | BCompare | IDEA |
linux开发环境 | winows开发环境 | linux远程登录工具 | linux文件传输工具 | 代码比较工具 | 代码编辑工具 |
2:构建 dgiot 需要 Erlang/OTP R24+, linux Windows下用 开发环境包开发。 下载后解压到D盘根目录,严格按照下图操作:
管理员身份运行后弹出下面命令框,可以在该命令框下,拉取上传编译代码会在 D:\msys64\home 下生成一个已电脑名命名的文件夹作为工作空间(注:名字必须为中文)
五:插件开发
在windows开发环境下,选手小明 准备实现 test 协议插件
1:一键式生成插件框架
注:test替换成自己插件名字
git clone https://atomgit.com/dgiot/dgiot.git
cd dgiot
./dgiot_install.sh -v atomgit -m test
生成成功
2:查看生成的插件代码
插件目录结构解释
3:编译启动工程
make run
启动成功后 ctrl+c 退出控制台 弹出下面erlang控制台框编译成功 在自己的插件代码中添加函数
hello_world() ->
io:format("~s ~p ~p.~n", [?FILE, ?LINE, <<"Hello World!!!">>]).
- 修改自己的插件代码后可以在erlang控制台执行 dgiot_plugin:compile(dgiot_test). 进行热编译
- 执行 dgiot_test:hello_world(). 执行函数
4:确认插件代码无误且能正确编译成功后再上传私仓
注:git remote 中的username
和password
替换成自己的用户名和个人令牌
git config --global user.name "xiaoming"
git config --global user.email "xiaoming@qq.com"
cd apps/dgiot_test
git init
git remote add origin https://username:password@atomgit.com/dgiot/dgiot_test.git
git add .
git commit -m "feat: first commit"
git push -u origin master
5:查看私仓上传成功
六:gRPC
1:grpc介绍
gRPC是一个高性能,开源和通用的RPC框架,基于Protobuf序列化协议开发,且支持众多开发语言。gRPC基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口。并运行一个gRPC服务器来处理客户端调用。在客户端拥有一个存根能够向服务端一样的方法。
2:dgiot_grpc_python连接
3:Dgiot客户端
dgiot通过grpc与其他语言相互通信以及函数调用。在dgiot中,以一个grpc通道处理所有交互。而grpc相关函数定义在dgiot_dlink下,分为login,logout,send三个函数。
- login login函数用于登录grpc服务端,其参数为ClinetId,为客户端编号。建立grpc通道后,将会在通道启动时以通道id为ClinetId登录python服务器。
- send send函数用于向python客户端发送消息。send函数位于通道的handle_message函数中。在通道接收到消息,并且匹配上Message中内容后即可根据消息内容执行send函数调用python服务。 send函数以map的格式发送消息,消息在发送前将经过base64编码。
- logout logout函数用于断开与python服务的连接,一般在通道的关闭函数stop中调用。
4:Python 程序文件
python程序示例位于插件\priv\example\python3目录下,其目录结构如下:
运行dlink_server文件即可启动python服务,接收信息函数位于Dlink类下SayHello方法。其接收request和context两个参数,参数含义如下:
- 1.request:接收参数,request下name属性为接收到的信息。
- 2.context:接收参数,当前的环境
自动生成python代码 ''' python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./dlink_server.proto '''
通过对request.name使用base64解码并转为字典后即可获取原本的信息。 接收参数后通过HelloReply的message字段返回一条信息: 完整交互结果如下图: