有种把数据处理写成backend/api的冲动

2012-07-04 15:36:48 +08:00
 luztak
今天写tornado的时候看着几乎每个Handler都有一句self.db.xx.find,头疼,想把它改成api/client,Handler通过api取数据……
球拍砖,球指点,球浇水 XD
5388 次点击
所在节点    Tornado
26 条回复
c
2012-07-04 15:38:10 +08:00
luztak
2012-07-04 15:40:45 +08:00
啊?
我的意思是Web部分和数据部分分开.要127.0.0.1的那种.想用json的0 0
INT21H
2012-07-04 15:47:29 +08:00
激进点,用erlang写个api读取数据,前端全部ajax处理,tornado直接做web server这样如何?
luztak
2012-07-04 15:49:06 +08:00
@INT2H Nice idea!
不过还没学Erlang.正好去学XD
INT21H
2012-07-04 15:54:12 +08:00
@luztak 我也在用tornado,其实erlang的特性就是并发,tornado也提供了比较好的异步IO,可以做backend提供api用。

可以看一下这个erlang程序 http://www.chicagoboss.org/
luztak
2012-07-04 15:56:27 +08:00
reorx
2012-07-04 16:00:56 +08:00
如果tornado作为client,连接API进行数据处理,数据io可能成为最大的瓶颈,因为你的每一次读写都造成了4次数据的往返。实际上tornado反而更适合做你说的backend/api,而不是提供页面的服务。
adow
2012-07-04 16:06:11 +08:00
我现在就是tornado 中一堆handler只输出json,然后web静态页面上全部ajax调用
luztak
2012-07-04 16:09:36 +08:00
@reorx 然后ajax去取tornado的结果?
@adow 这样的话……页面显示Handler岂不是一片def get(self): self.render('xx.html') ?
luztak
2012-07-04 16:14:30 +08:00
@xeorx 咦……
每次读,tornado->api请求,api->tornado结果
每次写,tornado->api请求+数据,api->tornado结果
你的意思是一次操作包含读和写么?但这里tornado每次要么get要么post,post部分是交给ajax做的
这样也要全部算上?
adow
2012-07-04 16:16:05 +08:00
@luztak 还好啦,比如我弄了好多个静态页面,当然全部放在staitc目录中,原来可以通过/static/index.html 来直接访问,不过url看上去不是很带感.

然后写了一个叫PageHandler的,把/:xxx 的全部用xxx.html 渲染,这样简单些.

不过如果url要求复杂的话只能一个个对应各自的handler了吧,我想反正也就写一个self.render还不算很复杂。

我现在做的这个用PageHander就足够了
reorx
2012-07-04 16:20:23 +08:00
@luztak 嗯,没错,我一般就是这样设计的架构,你可以看一下我做的一个玩具,tornado只负责提供数据,渲染和交互全部由js完成:

chatroom.reorx.com
luztak
2012-07-04 16:21:09 +08:00
@adow 牛人@ @
我朋友写的个论坛的templates里就是一堆又一堆{% %}/{{ }},.py就是一堆self.db
不过总感觉Ajax效率比较低……因为Ajax get/post回来的结果还要getElementById.innerHTML写进去(jQ我会,只不过觉得开销更大0 0),而页面元素一多这事效率就低了
luztak
2012-07-04 16:23:33 +08:00
@xeorx @adow 森森觉得自己孤陋寡闻了0 0
谢谢各位的建议,我就用ajax做了.
luztak
2012-07-04 16:23:40 +08:00
@xeorx @adow 森森觉得自己孤陋寡闻了0 0
谢谢各位的建议,我就用ajax做了.
adow
2012-07-04 16:24:35 +08:00
@luztak 我以前经常弄模版什么的,美工或者前端又不肯写那个模版语言,所以很多时候都是自己做了很多前端工作,而且我一些html/js/css就效率底下,然后我就和前端商量这样,他到还蛮乐意,因为他自己可以实现想要的各种折腾。只是这样的做法我觉得不适合大访问量的网站吧,因为很多请求来着,真的每次读写都是get/post,一个页面有时很多个请求
luztak
2012-07-04 16:29:20 +08:00
@adow 也是……我去试试Erlang.本地socket感觉要好些.
btw,Erlang->贰郎0 0
reorx
2012-07-04 16:41:54 +08:00
@luztak 啊,你名字打错了没有at到我,就没有看到#10的问题。

你理解的没错,其实是2次往返,4次传输 (request - response * 2),不过多一层通信总是多一些麻烦,所以不到万不得已我不会选择那样做。如果真的要做服务间的通信,用protocol buffers或者thrift这些成熟的方案吧。
luztak
2012-07-04 16:55:01 +08:00
@reorx 不知道怎么就敲成施乐了0 0
感觉thrift不错,fb家的东西.Thx.
binux
2012-07-04 17:10:47 +08:00
用PHP这么干过,没用模板,还是XML。。
用aria2输出的JSON-RPC的api做过。。

不过,如无必要,还是算了。。

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

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

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

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

© 2021 V2EX