V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lazywen
V2EX  ›  Python

开源一个自己用 Python3 写的 web server,求围观求拍砖

  •  
  •   lazywen · 2015-05-12 15:52:10 +08:00 · 5091 次点击
    这是一个创建于 3470 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Graily是一个用Python3写的单文件web server和简单微型web框架。目前只支持Linux(没做兼容)。

    为什么要造轮子?
    起初是为了需求做了个epoll的socket长连接队列服务,后来为了学习HTTP协议就尝试写了个协议的解析,过了半年突发奇想可以用之前写的服务的模块来做server,然后就结合在了一起。压力测试后效果不错,后来又突发奇想在一个外包项目里尝试了这个web server,结果遇到了各种bug,各种修改后运行还蛮稳定。所以造这个轮子其实就是学习的过程。

    为什么要开源?
    有的地方写的太乱或者太简单,整理后本来也不好意思拿出来,但想想这本来就是个简易的server,如果有新手不想看其它庞大的server或框架,可以看看只有1000多行的Graily,麻雀虽小却五脏具全,各种处理也都大概涉及到了,如果新手想自己写一个框架也提供了一个思路,能提交一些bug更好啦。还有个原因就是本人没有开源过什么东西,而这个web server现在跑的还算稳定,也算一个作品了。然后我就想了Graily这个名字,加上了WSGI支持(没有WSGI支持也不好意思说是个web server)。总的来说开源的主要目的也是为了学习(欢迎拍砖哈)。

    为什么有的地方设计得太微型了?
    比如URL路由就只简单用了正则匹配,也没做防攻击处理,template也很简单(template只支持变量替换和单行的if else操作和列表解析的写法)。由于是epoll驱动的,这个东西的强项在于socket长连接、HTTP长连接,要用到生产中如果有些东西不想写的话可以用其他框架在上层(WSGI就是干这个用的),然后Graily做server,毕竟性能还不错(性能比其他Python框架好很多的原因就是太微型了吧)。

    最后求围观求拍砖。

    地址: https://github.com/lazywen/graily

    最后附上 Hello, world :

    .js
    13 条回复    2015-05-12 23:17:55 +08:00
    yuewolf
        1
    yuewolf  
       2015-05-12 15:57:45 +08:00
    还在学 Python 2 的飘过一下。

    楼主帮帮哒
    woshifyz
        2
    woshifyz  
       2015-05-12 16:31:24 +08:00
    赞一个,我自己偶尔会用用tornado
    lazywen
        3
    lazywen  
    OP
       2015-05-12 16:31:49 +08:00
    @yuewolf 感谢支持,其实学会2就相当于学会3了
    ca1n
        4
    ca1n  
       2015-05-12 16:38:29 +08:00
    支持一下
    lazywen
        5
    lazywen  
    OP
       2015-05-12 17:40:22 +08:00
    @woshifyz
    @ca1n 感谢😘
    tonyluj
        6
    tonyluj  
       2015-05-12 18:44:14 +08:00
    赞一下,一直想用python wrap一下epoll
    LZ有没有尝试过asyncio
    magicdawn
        7
    magicdawn  
       2015-05-12 19:06:22 +08:00   ❤️ 1
    已送star,虽然不玩python
    ychongsaytc
        8
    ychongsaytc  
       2015-05-12 20:45:29 +08:00
    支持楼主,已送 star。
    有个问题就是,代码注释好少
    lazywen
        9
    lazywen  
    OP
       2015-05-12 21:17:57 +08:00
    @tonyluj asyncio底层也是系统事件驱动,实现方法差不多效率应该都差不多的
    lazywen
        10
    lazywen  
    OP
       2015-05-12 21:20:36 +08:00   ❤️ 1
    @ychongsaytc 是的,我会在后面的提交里多写注释😁
    laike9m
        11
    laike9m  
       2015-05-12 22:31:06 +08:00
    支持一个。看了下源码感觉就是简化版 Tornado。
    mingyun
        12
    mingyun  
       2015-05-12 22:35:22 +08:00
    python2刚入门
    lazywen
        13
    lazywen  
    OP
       2015-05-12 23:17:55 +08:00
    @laike9m 有些地方是模仿了tornado,再看看会发现有些地方模仿了bottle和twisted,WSGI还模仿了标准库wsgiref,其实就是吸取了各个框架的一些个人觉得不错的东西,然后揉和了在一起,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1130 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:30 · PVG 02:30 · LAX 10:30 · JFK 13:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.