Skip to content

asynchronous httpserver for kbengine using fd operation api of kbengine

Notifications You must be signed in to change notification settings

asynchronoust/kbengine-httpserver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

kbengine-httpserver

asynchronous httpserver for kbengine using fd operation api of kbengine

为kbengine写的http server 框架。站在巨人肩膀上面,借鉴收纳了tornadosanic的代码特性

features

  • 异步httpserver
  • 内嵌于kbengine引擎
  • 使用 kbengine 提供的 registerReadFileDescriptor deregisterReadFileDescriptor 等和读写文件描述符的API
  • 类tornado 和 sanic 的用法,结合两个框架的内容

Quick Start

类似于python tornado的使用方式,看下面的例子

from httpserver.app import Application, RequestHandler


class IndexHandler(RequestHandler):

    def get(self, *args, **kwargs):
        print("index, get")
        self.write_text("index ok")


class HomeHandler(RequestHandler):

    def get(self, *args, **kwargs):
        print("home, get")
        self.write_text("home ok")

    def post(self, *args, **kwargs):
        # DEBUG_MSG("post body, %s" % str(self.request.json))
        self.write_json(self.request.json)

url_map = [
    ("/index", IndexHandler),
    ("/home", HomeHandler)
]
app = Application(url_map)
app.run("0.0.0.0", 9191)

主要使用步骤:

  • 继承RequestHandler类,需要实现哪个HTTP method就赋写哪个函数(这些和tornado的使用方式类似)
    • get, post, put, delete 等等
  • 此类有self.request成员属性是Request对象,可以获取请求的各种数据。更多具体请看Request对象源码。此对象借鉴了sanic框架的思路
    • request.json
    • request.args:
      • args.get(key)
      • args.get_list(key)
    • request.query_string
    • request.path
  • 回给客户端请求使用下面几个函数。可以在去做一个异步的操作,然后在回调函数中去给client 回http包
    • write_json
    • write_text
    • write_raw
  • 定义 url 和 handler的对应关系,示例中的 url_map
  • 生成app实例,app.run() 就运行起此httpserver

说明:

  • 现在没有出pip包,如果要放到工程里面的话,直接把httpserver目录拷贝到自己工程中assets/scripts/server_common目录下面

requirements

  • httptools
  • multidict

安装上面两个库的最新版本即可,另外在使用pip安装的时候一定要安装和引擎内置Python版本一致的Python,再用pip安装,这样才能正确在引擎的Python版本下正常运行。因为httptools库使用了c扩展,所以要保证Python版本一致

完善与改进

  • 现在的router还不完善,url中现在只支持具体的url,不支持url中带不定参数给handler函数,也不支持url正则匹配
  • 如果要做 html template渲染,直接使用jinja2的包即可,自己封装一下渲染后的结果然后write_text

About

asynchronous httpserver for kbengine using fd operation api of kbengine

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages