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

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

moonscript 草草看过,感觉是标准的 js 和 coffee js 的关系,本来就是入门 lua,懒得多看一个语法了~
mywaiting
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
2018-03-16 10:35:03 +08:00
local 是为了提高性能,table 虽然没有 append,但是你可以用[#table]=newvale 这样使用啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/438389

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX