2020/04/27 05-result接口实现和WEB端开发实现

之前对整个任务的下发,到master的指派,调度,到agent的执行,执行完结果也拿到了。
master下的message中拿到消息,调它的store

2020/04/27 05-result接口实现和WEB端开发实现
master的message负责暴露接口
2020/04/27 05-result接口实现和WEB端开发实现
发过来的执行的结果最后要存储起来

结果也就是这个四样
2020/04/27 05-result接口实现和WEB端开发实现
在找个store,就完成了对数据的存取
2020/04/27 05-result接口实现和WEB端开发实现
所以在storage,需要加个result,这样result就能把数据存进去了
2020/04/27 05-result接口实现和WEB端开发实现
领任务的时候,把自己的状态变成running了,交换的时候就要变成wait,这里只能把自己的状态修改,因为做完了,才有资格去要任务

2020/04/27 05-result接口实现和WEB端开发实现
这里可能有点问题,这里又变成waiting了,不能说明任务做还是没做过
2020/04/27 05-result接口实现和WEB端开发实现
所以要打开下面这个
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
你提交了还不能算任务成功,还要判断任务的失败率来判断才行
2020/04/27 05-result接口实现和WEB端开发实现
最后改自己的状态又可以接任务了

2020/04/27 05-result接口实现和WEB端开发实现
这个判断不严格,需要改掉

2020/04/27 05-result接口实现和WEB端开发实现
下面写成字典,访问方便,也可以写成字典2020/04/27 05-result接口实现和WEB端开发实现
这样数据存储过来,就可以把状态改变 了
2020/04/27 05-result接口实现和WEB端开发实现
从web端提交任务过来,提交到master,由master把任务保存起来,然后agent来领取任务,就可以拿回去了,执行完,调用别人的result,把结果记录下来,这里全都可以改成 操作数据库,也就是storage可以实现对数据库的存取
2020/04/27 05-result接口实现和WEB端开发实现
master包和agent包有了,差web包

2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
webserver随便用什么写,因为传输的就是http,所以只要把server实现

2020/04/27 05-result接口实现和WEB端开发实现
需要把找个库装一下

2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
server都是类似的,start,shutdown
2020/04/27 05-result接口实现和WEB端开发实现
照抄这一段

2020/04/27 05-result接口实现和WEB端开发实现
这里就是在做映射
2020/04/27 05-result接口实现和WEB端开发实现
网页里应该把所有能用的agent拿回来,加个self.app
2020/04/27 05-result接口实现和WEB端开发实现
要写一个handler
2020/04/27 05-result接口实现和WEB端开发实现
改一下handler名字,url可以自己定,resultful,方法+url,在url中加数据,不用查询字符串,这就是resultful最基本的样子
2020/04/27 05-result接口实现和WEB端开发实现
只要访问/agent/list,就会异步调用下面的方法,去拿数据,然后response返回
2020/04/27 05-result接口实现和WEB端开发实现
需要去问zerorpc要数据,只有master才能作为socket通信的server
2020/04/27 05-result接口实现和WEB端开发实现
现在当用户请求,只要访问这个接口,就是来请求agent列表的,agent列表跟request无关,以后请求列表里也是带分页,一般情况下,最好带分组,而不是分页,jquery里就由插件,树形结构就可以加点,然后加载出来,刚好使用到jquery的异步加载的能力,jquery,ajax。
如果用react,antdesign就由树形组件,树形组件一定会告诉你异步加载

2020/04/27 05-result接口实现和WEB端开发实现
可以测试一下,if name ==‘main,可以不写在这里2020/04/27 05-result接口实现和WEB端开发实现
现在假设链接成功,写个appweb来测试
2020/04/27 05-result接口实现和WEB端开发实现
web起来之前先把server起来,但是现在先起web,看看能不能用
2020/04/27 05-result接口实现和WEB端开发实现
启动appweb
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现

用postman测试一下,拿回来了,web是成功的
2020/04/27 05-result接口实现和WEB端开发实现
json里有对象,data是要的数据
2020/04/27 05-result接口实现和WEB端开发实现
data是调用jason的dump,dump变成json字符串来返回,拿到之后包装text,把原来的text替换,response出去
2020/04/27 05-result接口实现和WEB端开发实现
这里就放个字典

2020/04/27 05-result接口实现和WEB端开发实现
启动一下,再次访问,这样就成了
2020/04/27 05-result接口实现和WEB端开发实现
现在想要所有的agents,还有派发任务的东西,master先启动,agent第二个启动,过来之后将自己的id放在这里,然后发一个agents请求,把这些所有的agent的id,发给web,我们就可以使用了
2020/04/27 05-result接口实现和WEB端开发实现
下面就是调用这个
2020/04/27 05-result接口实现和WEB端开发实现
master的都到message里来,要暴露给client端口,调用这个值,return出去,这里返回其实不应该是列表list,而是字典,最后返回的应该是xxxxid:hostname这样的,便于前端最后显示
2020/04/27 05-result接口实现和WEB端开发实现
这个agents方法目前没有

2020/04/27 05-result接口实现和WEB端开发实现
storage目前没有这个方法,需要写一个,造一个字典,values都是agent对象
2020/04/27 05-result接口实现和WEB端开发实现

webserver调用,就拿到了这个字典
2020/04/27 05-result接口实现和WEB端开发实现
这里改正一下id
2020/04/27 05-result接口实现和WEB端开发实现

启动server

2020/04/27 05-result接口实现和WEB端开发实现
一次启动

2020/04/27 05-result接口实现和WEB端开发实现
这样就发过来了

2020/04/27 05-result接口实现和WEB端开发实现
把web完善下

2020/04/27 05-result接口实现和WEB端开发实现
修改完了启动一下

2020/04/27 05-result接口实现和WEB端开发实现
这样就拿到数据了

2020/04/27 05-result接口实现和WEB端开发实现
这是id,用户看到的是主机名,以后就可以给这个id下发任务
2020/04/27 05-result接口实现和WEB端开发实现

准备写post方法,提交任务,这个id只有一个,也就是把任务派给你
2020/04/27 05-result接口实现和WEB端开发实现
post方法也是通过浏览器发的,浏览器最后发给web

2020/04/27 05-result接口实现和WEB端开发实现
这个web里要添加一句,向task发,应该有handle
2020/04/27 05-result接口实现和WEB端开发实现
加一个任务早就在master/message里写了,add_task

2020/04/27 05-result接口实现和WEB端开发实现
add_task里要给一个所谓的字典,值都要写到storage里的add_task里
2020/04/27 05-result接口实现和WEB端开发实现
现在能给三项,script,timeout,targets,剩下全可以缺省值
2020/04/27 05-result接口实现和WEB端开发实现
先不调用,先把json返回一下
2020/04/27 05-result接口实现和WEB端开发实现
重启web
2020/04/27 05-result接口实现和WEB端开发实现
启动一下,调用task_hanle方法,然后return
2020/04/27 05-result接口实现和WEB端开发实现
send一下

2020/04/27 05-result接口实现和WEB端开发实现
coroutine就不能这么做

2020/04/27 05-result接口实现和WEB端开发实现
试试用await

2020/04/27 05-result接口实现和WEB端开发实现
重启web

2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现

coroutine这个对象,要用await来等,做异步的时候要切一下,这样就拿到值了
2020/04/27 05-result接口实现和WEB端开发实现
j是一个字典,所以要加await,异步的时候要这么用

2020/04/27 05-result接口实现和WEB端开发实现
async是异步,遇到coroutine,要写await(以前是yield from改成了await),只要后面coroutine,就await,拿到j就直接是字典了
2020/04/27 05-result接口实现和WEB端开发实现
提交一个任务,任务指派要看agent是否空闲,空闲来领任务,就会去执行,执行完了就会输出
2020/04/27 05-result接口实现和WEB端开发实现
agent执行,是调用executor,执行完会打印信息,用logger.INFO打
2020/04/27 05-result接口实现和WEB端开发实现
这三个启动一下

2020/04/27 05-result接口实现和WEB端开发实现
这里追踪下日志

2020/04/27 05-result接口实现和WEB端开发实现
send一下

2020/04/27 05-result接口实现和WEB端开发实现
成功
2020/04/27 05-result接口实现和WEB端开发实现
现在全部暴露的是接口,返回全是json,又可以做到前后端分离,不会写前端可以找jquery’
jquery script,src juquery.js,,$.就开始了

现在前后打通,主要业务已经完成了
2020/04/27 05-result接口实现和WEB端开发实现

2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
2020/04/27 05-result接口实现和WEB端开发实现
aiohttp用的人挺多的
2020/04/27 05-result接口实现和WEB端开发实现
常用的东西就是application做路由
2020/04/27 05-result接口实现和WEB端开发实现

只不过定义的时候需要async来定义,如果打印的数据类型是coroutine,异步的时候讲要用yield from,也有原生关键字await
2020/04/27 05-result接口实现和WEB端开发实现
如果要看任务详细,就配个路由,/task/1,然后配一个handle
2020/04/27 05-result接口实现和WEB端开发实现
所有的web开发都是一样,通过url或者模式,都最后要映射到函数上,web开发就是一个request,一个response
2020/04/27 05-result接口实现和WEB端开发实现
这是mscheduler,是做任务调度分派的,用主动推的就要写调度器了,比较麻烦,拉比较简单,谁空闲谁来拉。
中间如何通信,写几层,每一个包内如何分模块,分类。
还有数据选择什么类型,多查询就还是用字典,遍历还是用列表,什么类型都可以,大量用序列化和反序列化,只不过被包装起来msgpack实现,更多来解决接口问题

rpc框架最重要就是接口,两端接口,两端解析数据要用到的类,要一样,zerorpc,封装了更多,使用更简单,用了内建数据结构,