如何在SAE上架设RPC服务与Openresty的Lua服务通信

如题所述

第1步:Openresty服务器安装和Lapis框架部署(此处只介绍Lapis的安装)
a). 安装luarocks。
sudo apt-get install luarocks
b). 通过luarocks安装lapis框架。
sudo luarocks install lapis
第2步:用Lapis 创建Openresty工程.
lapis new
3.在Openresty中创建一个定时任务。
定时器的实现思想如下:
让Openresty去加载一个lua脚本,脚本通过启动一个timer设定,调用一个函数,在被调用的函数内部,循环递归的进行time设定,调用这个被周函数本身,利用这种周期性的调用事件,我们定时递归的函数体中,执行一个函数过程CallRPC()去通过RPC协议访问SAE云上的数据。
RPC接口定义与实现,在下面接下来的Django部分会详细说明,下面就是提到的函数。此函数的主要的目的是6秒钟的时间间隔,通过RPC协议,拉取SAE上Mysql数据库里的数据,至于传输什么数据是和你的业务直接相关的,我们此处就使用一个简单的数据结构来说明问题。
local handler
function handler(premature, params)
--CallRPC就是Lua通过JSON.RPC访问SAE的RPC服务器。
CallRPC()
--递归的timer,重复调用handler函数。
local ok, err = ngx.timer.at(6, handler, "params-data")
ngx.log(ngx.DEBUG, "ok:", ok, " err:", err)
end
--第一次设定timer,调用hander函数。
local ok, err = ngx.timer.at(6, handler,"params-data")
ngx.log(ngx.DEBUG, "ok:", ok," err:", err)
--判断第一次调用是否成功,如查不成功,把问题原因打印出来。
if not ok then
ngx.log(ngx.ERR, "err:", err)
end
创建SAE上的RPC服务:
完成创建工作需要五步:
1. 创建一个Django工程 。
2. 安装RPC4Django。
3. .创建立数据库表。
4. 实现RPC服务接口。
5. 启动RPC服务。
我们先暂停Openresty的部分,先介绍如何在SAE构建RPC服务器。
之前已经提过,构SAE上的RPC服务使用的是SAE的PYTHON服务,使用的也是SAE天然支持的Django框架。下面介绍的是创建一个Django工程,SAE天然支持 Django, Tornado, Flask框加。如果需要更多信息,请参考如下文章。
http://www.epubit.com.cn/article/143
服务器端
第一步:创建一个Django工程 。
a). 创建工程。
django-admin.pystartproject testrpc
b). 在工程内创建APP。
pythonmanage.py startapp myrpc
两格指令执行后,系统上建立如下的目录结构。
这表明Djago已经成功能完成创建工程和APP。
第二步:安装RPC4Django。
RPC服务主要靠的就是用RPC4Django来实现,rpc4django是一个开源项目,项目的地址如下:https://github.com/davidfischer/rpc4django
rpc4django也是一个Django的App,使用的话,只要在setting.py配置文件中引用即可。
修改testrpc文件夹中的setting.py文件,如下图:
把rpc4django加入到工程安装的APP的列表里,这样就可以像引用普APP一样使用rpc4django了。
第三步.创建立数据库表。
Django是MVC模式的Python框加,并且支持ORM,只要定一义一个Python的Model类,就可以同步生成数据库表。
我们在myrpc文件夹下的models.py里面加入表定义类,如下图:
创建完Model模块类后,需要同步一下DB,将Django根据类的定义生成对应的DB表格。
pythonmanage.py syncdb
如果之前安装了SAE的本地运行环境的话,可能使用cloudsql.py 直接访问远端的SAE数据库命令行。
第五步:启动RPC服务。
经过以上四步,一个最简单的SAE上的RPC服务就架设完了,让我们启到一个这个应用,然后RPC服务才可用。
Python manager.py runserver 127.0.0.1:8080
回到之前的Lua介绍,还剩下的步骤:
1.Lua调用 SAE上的RPC服务接口。
2.将返回的数据写入Openresty的ShareDiction中。
3.使用Lapis模板系统,将返回结果显示到网页上。
温馨提示:答案为网友推荐,仅供参考
相似回答