V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mywaiting
V2EX  ›  OpenResty

用 Nginx Openresty 写个网站,写得很痛苦

  •  
  •   mywaiting · 2018-03-15 17:07:23 +08:00 · 8091 次点击
    这是一个创建于 2422 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为工作需要,为后端的 API 写了个简单的 Nginx lua 可控的代理,就几百行的 Lua,边测试边学习,把这点 Openresty 的代码给写完了~ 虽然后来发现有 Kong 这样优秀的项目,不过代码也不多,就当造个轮子了~

    不知道是不是看到 Openresty 的性能好啥,还是完美癖发作了,觉得服务器上与其跑个 Python 的 Tornado 做后端,不如尝试一下用 Openresty 来写写后端的逻辑

    于是动手,一边学习 lua 一边写,越写越感觉痛苦,虽然这痛苦很大程度是因为对 lua 不够熟悉引起的

    1、table 作为 lua 主要的数据结构,竟然没有 table.append(table) 这样的实现,很无奈
    2、遍地的 local、local 不知道大家看着有什么感想
    3、即使是 Openresty 发展了几年的今天,感觉周边成熟的库仍然不够,我能吐槽一下翻遍整个 Github 都没有找到个现成好用点的 form validation 的库,只能自己手写正则去 form validate,这还是我用了 lor 框架的情况下的现实

    稍微吐槽一下,也不算吐槽吧,就是小学生试用了 lua 和 Openresty 以后的一点体会

    Openresty 的设计真心适合 Nginx web/api 这样的场景

    Lua 的设计真心简洁,不过也实在太简洁了~ 我还是回到 Python 的怀抱里吃着各种语法糖做梦好了~
    8 条回复    2018-03-16 10:35:03 +08:00
    rim99
        1
    rim99  
       2018-03-15 18:03:50 +08:00 via iPhone
    感觉 openresty 是不是适合在数据库封装一层 restful api?
    herozem
        2
    herozem  
       2018-03-15 18:41:58 +08:00 via iPhone
    lua 到处都是 local,go 到处都是 if err != nil,还是大 python 好😹python 糖真的好吃
    cloudyplain
        3
    cloudyplain  
       2018-03-15 18:56:12 +08:00
    lapis 了解下,moonscript 看上去还成,python 手感好。
    changnet
        4
    changnet  
       2018-03-15 18:56:13 +08:00 via Android
    我游戏后端,table.append 手写花不了 10 行代码吧。openrest 本身设计就不是做网站的吧。人家是做后端应用的。
    mywaiting
        5
    mywaiting  
    OP
       2018-03-15 22:51:13 +08:00
    @rim99 #1 很难说适合不适合,背靠 Nginx 这颗大树,能做的事情很多
    mywaiting
        6
    mywaiting  
    OP
       2018-03-15 22:56:19 +08:00
    @cloudyplain #3 有仔细翻过一大片的 Openresty 系列的框架和相关的实现,代码都草草地看过一些,最后还是选择国人的 lor 跳坑,毕竟类似 expressjs 和 Sinatra 这样出来的框架的 middleware 很好理解和使用

    moonscript 草草看过,感觉是标准的 js 和 coffee js 的关系,本来就是入门 lua,懒得多看一个语法了~
    mywaiting
        7
    mywaiting  
    OP
       2018-03-15 23:13:40 +08:00
    @changnet #4 也不是手写的问题,写的话去 stackoverflow 有现成的,就是 python 里宠习惯了,感觉这个都没有~糖吃多了,少点糖都不习惯了都

    相比 openresty 里去管理( auth、access、rate_limite )后端的 API,我反而觉得 openresty 做 web 也是相当的适合的,nginx.conf 直接管理所有的路径( router )跟 lua 处理函数( controller )的映射,openresty 各种的函数和极其方便的 ngx.print,要不是我的 lua 刚刚入门,刚刚这个真可以玩出花来~

    翻看 nginx 的各路八卦,现在官方不是有引入 js 作为 conf 文件的配置方式了么。nginx+lua 有点为了性能而妥协的结果,如果不久的将来 nginx+js (或者 nodejs 之类)/nginx+python,或者能引领一个新的 web 开发浪潮,毕竟会 js 的同学,github 上真是千千万万~而背靠着 nginx 的性能,肯定甩掉其他所谓的高性能的框架的几个光年
    aokihu
        8
    aokihu  
       2018-03-16 10:35:03 +08:00
    local 是为了提高性能,table 虽然没有 append,但是你可以用[#table]=newvale 这样使用啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:31 · PVG 08:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.