对resty客户端的一些想法

131 views
Skip to first unread message

雨师

unread,
Sep 22, 2016, 10:53:28 PM9/22/16
to openresty
Dear All:

    在之前和同事的一些讨论和工作需要中,我们想要运行一些 lua定时脚本,但是为了安全性,希望这些脚本不暴露为接口(当然用一些验证方法也可以提升安全性,但是为了更加简便和快捷)。因此我想到在 openresty
中加一个 client 的部分。之前也有学习过使用perl模拟的client,但是更想能实现如下一些功能:
    1. 能够访问如 shared_dict 等一些服务器本身的数据
    2. 类似于resty-client,能够直接./resty-client 'CODE' 执行自己的代码,或者文件

     因为上面的一些理由,我尝试fork出一个具有 openresty-client 功能的分支。大概逻辑为:
     1.因为不需要接受很多的请求,因此只在其中一个 worker 上建立了所需的 socket(之前尝试过使用named pipe,但是在双向通信和那个文件的关闭上感觉不太好用),放入到 nginx 的 event 事件中监听;
     2.基于 init_worker 中的 lmcf 创建自己的 vm。供之后执行 lua 代码使用。其中为了方便 client 的作用,现在是没有用到缓存代码的逻辑的;
     3.相应客户端请求,并使用 ngx_http_lua_create_fake_connection 和 ngx_http_lua_create_fake_request 创建出本次执行所需的 connection 和 request,使用 ngx_http_lua_run_thread 执行代码;
     4.在执行完毕 lua 代码后,在 connection 的 send_chain 方法中将内容返回给客户端;

     我计划还有一些设想:
     1.可以配置的客户端 socket 地址和端口;
     2.将错误信息能够返回给客户端;
     3.将这个 client 做成一个 nginx 的module, 便于安装,且防止对 ngx_lua_module 过多伤害;

     大家对这种 client 有没有什么想法或其他意见?

Ming

unread,
Sep 22, 2016, 10:56:25 PM9/22/16
to open...@googlegroups.com
这个功能我们已经实现了,在公司内部使用。@院生 看看开源出来吧。
简单的说,我们把 crontab 的功能在 OpenResty 里面用 ngx.timer() 实现了。

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty+subscribe@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsubscribe@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html

YuanSheng Wang

unread,
Sep 24, 2016, 11:42:26 AM9/24/16
to open...@googlegroups.com
2016-09-23 10:56 GMT+08:00 Ming <moonbi...@gmail.com>:
这个功能我们已经实现了,在公司内部使用。@院生 看看开源出来吧。
简单的说,我们把 crontab 的功能在 OpenResty 里面用 ngx.timer() 实现了。

好的,后面抽空安排一下。还自带了管理界面呢,怎么把这个忘记了。



--

YuanSheng Wang
---------------------------------------
OpenResty lover ^_^

Yichun Zhang (agentzh)

unread,
Sep 24, 2016, 2:33:29 PM9/24/16
to openresty
Hello!

2016-09-22 19:56 GMT-07:00 Ming:
> 这个功能我们已经实现了,在公司内部使用。@院生 看看开源出来吧。
> 简单的说,我们把 crontab 的功能在 OpenResty 里面用 ngx.timer() 实现了。
>

lua-resty-upstream-healthcheck 库不是一个现成的这样的例子吗?嘿嘿。

https://github.com/openresty/lua-resty-upstream-healthcheck

Regards,
-agentzh
Reply all
Reply to author
Forward
0 new messages