基于 Gevent,撸了一个 web 框架的轮子

2016-05-06 22:05:50 +08:00
 aljun

这是楼主的第一个上交到 pypi 的项目,项目名字叫 Jolla 是一个基于 gevent 的高性能 API server

这里是 gevent 所有的特性(来自 gevent 的文档):

以上这些特性,都被 Jolla 继承了

Jolla 也拥有以下独特的特性

当我在写 Jolla 时,想写的是一个高性能的 API server ,它能让使用者以简短而简短的规则去完成 server 的工作,能让他们把她们的计算过程也好运算也好,快速的发到浏览器或移动端,所以我把 Jolla 写的尽可能简单。

项目地址在这 http://salamer.github.io/jolla/ 项目文档教程在这 https://github.com/salamer/jolla/wiki

如果有什么不对的,或是错误的地方,欢迎指点,如果觉得好,可以 star 一下,谢谢啦~

安装是:

pip install jolla

使用绝对简单:


from jolla import WebApp,jolla_server,render

def index(request):
    return render('index.html')

class app(WebApp):
    urls=[
        (r'/',index)
    ]

if __name__=="__main__":
    server=jolla_server(app)
    server.run_server()
    

(之前在 v 站发错节点了)

7689 次点击
所在节点    Python
55 条回复
aljun
2016-05-07 10:31:02 +08:00
@mirrosite 这个怎么说呢?求赐教
aljun
2016-05-07 10:31:16 +08:00
@julyclyde 并没有 io 库呀
aljun
2016-05-07 10:31:30 +08:00
@Allianzcortex 啊?为什么?
Owenjia
2016-05-07 11:00:57 +08:00
@aljun
我个人更喜欢应用和服务器分开,现在在用 gunicorn ,代码里只写些逻辑之类的,然后写好应用直接用它运行。
aljun
2016-05-07 11:03:50 +08:00
@Owenjia 当时的想法就是,现在要是有一个计算的后端要求,然后需要提供服务,那就把心思放在计算上,然后极为简单的使用 Jolla 扔上去就好,所以我才用的 gevent 的 pywsgi ,性能我测试结果还是很不错的
mengzhuo
2016-05-07 11:04:38 +08:00
楼主的代码太复杂了…
可以看看我的项目 json rpc
https://github.com/mengzhuo/justrpc
xxr3376
2016-05-07 11:09:57 +08:00
楼主你的 git commit log 实在是太过于混乱了。。。各种 update 不知道在干吗,以及翻看了一下以前的项目发现一屏幕“~~~~”。。。

本来想看看代码精妙之处的,不过看着实在太累。。
Owenjia
2016-05-07 11:12:17 +08:00
@aljun
gevent 我也在用啦,性能确实不错。我的意思只是把运行方式独立出来,就是把你例子里的最后那几行单独作为一个命令拿出来。
原本需要 python foo.py 这样运行,用 gunicorn 就是 gunicorn foo:app 这样运行,代码里不需要涉及任何运行用的语句,只是 wsgi 应用。
xxr3376
2016-05-07 11:16:00 +08:00
@Owenjia 支持,为了极其不明显的性能优化把代码的复杂度提升了一个等级完全得不偿失。

顺便看了看代码,一屏幕的

{{
try:
self.request['cookies'] = self._environ['HTTP_COOKIE']
except KeyError:
self.request['cookies'] = None
}}

为啥不直接 self.request['cookies'] = self._environ.get('HTTP_COOKIE', None) 呢。。
aljun
2016-05-07 11:16:36 +08:00
@xxr3376 当年不懂事啊⋯⋯现在开始认真对待 github 了,我 commit 时应该有写 update 啥的吧
aljun
2016-05-07 11:17:34 +08:00
@xxr3376 当时觉得看着蛮喜欢⋯⋯就这样写了,嗯嗯,这种规范问题以后注意
xxr3376
2016-05-07 11:18:16 +08:00
@aljun 比如 gevent 的 WSGI IO 库( gevent ), parse query_string 的 urlparse 标准库已经有了。。为何你还要重新造轮子,更何况你的 query_string parser 写的不对。。
aljun
2016-05-07 11:18:21 +08:00
@Owenjia 嗯,好,我再想想看看,能不能做成这么优化
aljun
2016-05-07 11:19:36 +08:00
@xxr3376 好,回去改改,
xxr3376
2016-05-07 11:20:27 +08:00
@aljun update 没有啥语义,同样是 update 有的时候是更新了下版本号,有的时候随便改了点别的。
在公司里一般都会用 http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html 这类的 commit log ,否则 review 你的 commit 会超费时间。。
xxr3376
2016-05-07 11:23:01 +08:00
@aljun 作为一个 library ,不应该用 print ,而是应该用标准的 logging 。用户可以用 logging scope 去自由的选择要不要看到你的提示。

raise HTTP404Error ,作为一个框架应该是 HTTPStatusError(404),这样就能支持任意的 HTTP Error 了。
minsheng
2016-05-07 11:23:46 +08:00
看到 Jolla 突然想知道是什么意思,为什么莫名让我想起了墨西哥边上的一座城市
bwangel
2016-05-07 11:24:43 +08:00
额,看到你项目里面刷 PR 的。。。

这个真是。。。。
xxr3376
2016-05-07 11:24:48 +08:00
@aljun 看到了 parse 里面居然是每次临时 compile regex 的。。同学你的高性能去哪里了。。
aljun
2016-05-07 11:25:03 +08:00
@xxr3376 嗯,好的,受教了,因为这是第一个拿出来做库的项目,多多不注意请谅解,我回去在思考一下优化下设计上不合理的地方

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

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

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

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

© 2021 V2EX