lua-resty-router 实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hulk
V2EX    程序员

lua-resty-router 实现

  •  
  •   hulk
    git-hulk 2017-04-22 21:06:08 +08:00 3389 次点击
    这是一个创建于 3144 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单的 nginx-lua 路由实现,欢迎一起来玩玩: https://github.com/git-hulk/lua-resty-router

    6 条回复    2017-05-03 00:01:56 +08:00
    artandlol
        1
    artandlol  
       2017-04-22 21:24:59 +08:00 via Android
    早上还有人要搞这个来着 。。。
    hulk
        2
    hulk  
    OP
       2017-04-22 21:40:42 +08:00
    @artandlol 哈哈,抢先一步
    spacewander
        3
    spacewander  
       2017-04-24 00:54:22 +08:00
    仔细看了下代码。
    随便说几点肤浅的想法~
    1. 这个 router 并不依赖于 cosocket 吧……刚打开的时候看到一句 ` based on the cosocket API`,我还以为这个 router 是不是会动态更新路由。
    2. 创建 router 和 使用 router 的场景可以分离。毕竟 router 在响应请求时一般不会再修改内部的配置,无需每次请求都创建一遍。我觉得有必要在 README 中展示这一点。当然 `throw` 函数就要备两份,不能创建和使用 router 都使用同一个。
    3. 如果存在 `get /a/:b/:c`,就不能再定义 `get /a/:b`。但其实这应该是两种路由。感觉节点树的实现还可以更精细些。
    4. 路由没有实现 normalize ,比如我在路由里加个 `../`,就不能正常处理了。而 Nginx 自身的路由是可以处理这种情况的。当然这个就吹毛求疵啦。
    5. router 的匹配里面,如果已知当前节点只有一个子节点(或少数几个子节点),是否可以改用正则匹配的方式去比较呢?这样就可以节省继续解析 token 的花销了。
    spacewander
        4
    spacewander  
       2017-04-24 09:42:46 +08:00   1
    我上面说的第 4 点是错的……
    Nginx 的 `$uri` 本身就已经 normalize 了,是我看代码的时候想当然了。
    hulk
        5
    hulk  
    OP
       2017-05-02 23:21:50 +08:00
    1. 这个是 README 格式 copy 没有去掉,已经 FIX
    2. 是的,例子上可能是有些误导,实际上使用应该是在 init 的时候添加路由,实际使用就不用再关心
    3. 这个是实现的 bug, 如果先添加 `get /a/:b/` 就可以添加 `get /a/:b/:c`, 这个我会 FIX
    5. 这点我后面对比压测下当前的实现和正则的性能差别,如果差别不大,不会去做特殊优化。

    最后以上建议都很棒,感谢回馈~
    hulk
        6
    hulk  
    OP
       2017-05-03 00:01:56 +08:00
    3. 如果存在 `get /a/:b/:c`,就不能再定义 `get /a/:b`。 最新版本已经 FIX
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     839 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:32 PVG 06:32 LAX 14:32 JFK 17:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86