doujiang24 目前只遇到ngx.location.capture这个限制.

原因是原本content_by_lua阶段的逻辑使用了很多capture, 因为考虑capture比完整请求要轻量.
随着项目发展, 这些逻辑其中一些要跑在timer里了, timer不支持capture, 只好到处去ngx.get_phase()区分.

看文档时我在想, 既然timer已经"will take one (fake) connection"了, 那不能干脆 take one (fake) request么, 然后timer逻辑发生在这个fake request的content_by阶段, 能使用content阶段所有功能.

毕竟没看过源码, 很可能想的过于简单.

feng
这个 PR 只是完成 shdict 在 stream 和 http 之间共享呢
完全的合并两个 lua vm,这是另外一个话题,其实合并也不太好

    firlas
    确实 timer 还不是完整的请求,没有 content phase 这个概念了呢,执行上也没有了呢
    要支持的话,还是有一些改动量的,当然也不是要引入 content phase 才可以,有其他路子

      tweyseo 这个功能太有用.

      如果考虑到nginx的设计, 请求到所有worker这个改动太大的话, 那一个可以广播自定义数据到所有worker的api怎样

      tanjinhua 这个我已经用来代替kong的resty-event用在mlcache里了,算上编译过程,整个不算简单易用。要是OR本身可以支持,比如,直接配置listen 9527 BCST;,然后不管外部还是内部,只要是到这个端口的数据都是给所有worker都处理的,这样岂不是更好。

      tweyseo 是的,系统本身自带肯定更好的,也是比较基本和使用的功能了;但是这个估计要修改 nginx 本身,工作量会比较大的。

        6 days later
        6 days later

        jils2013
        这个工程量也有一些,需要加入有 upstream zone 的概念,与此同时,搞了 keepalived_timeout 的支持,一直一起搞的也有 pool_size 的支持了

          6 days later
          5 days later

          在实现oidc协议时,使用resty.http库只能指定IP,不能实现动态负载均衡,想使用ngx.location.capture发起子请求,重新走一次主流程 ,以动态负载的复用。发现ngx.location.capture不会执行主流程中的access_by_lua,从而不能实现动态选取后端节点,以及ngx.location.capture不支持自定义header 头,这样导致不能跟据header头中的host以及其它字段进行负载。