liuer-mihou

1

from tornado.httpserver import HTTPServer
from tornado.httputil import HTTPServerConnectionDelegate, HTTPMessageDelegate, ResponseStartLine, HTTPHeaders
from tornado.routing import RuleRouter, Rule, PathMatches
from tornado.web import RequestHandler, Application
from tornado.ioloop import IOLoop

\'\'\'
RuleRouter([Rule的实例1,Rule的实例2])
\'\'\'

\'\'\'
第一种
Rule(Matcher,HTTPServerConnectionDelegate)
\'\'\'


class MessageDelegate(HTTPMessageDelegate):
    def __init__(self, connection):
        self.connection = connection

    def finish(self):
        self.connection.write_headers(
            ResponseStartLine("HTTP/1.1", 200, "OK"),  # HTTP响应的状态行
            HTTPHeaders({"Content-Length": "2", "k": \'V\'}),  # Response Headers 响应头部
            b"OK")  # 响应body
        self.connection.finish()


class ConnectionDelegate(HTTPServerConnectionDelegate):
    def start_request(self, server_conn, request_conn):
        print(server_conn, request_conn)
        return MessageDelegate(request_conn)


router = RuleRouter([
    Rule(PathMatches("/handler"), ConnectionDelegate()),
    # ... more rules
])

if __name__ == \'__main__\':
    server = HTTPServer(router)
    server.listen(8888)
    IOLoop.current().start()
from tornado.httpserver import HTTPServer
from tornado.httputil import HTTPServerConnectionDelegate, HTTPMessageDelegate, ResponseStartLine, HTTPHeaders, \
    HTTPServerRequest
from tornado.routing import RuleRouter, Rule, PathMatches, Router
from tornado.web import RequestHandler, Application
from tornado.ioloop import IOLoop
import tornado.template

\'\'\'
RuleRouter([Rule的实例1,Rule的实例2])
\'\'\'

\'\'\'
第二种
Rule(Matcher,Router实例)
Router实例本质还是提供一个 HTTPMessageDelegate去处理
\'\'\'


class MessageDelegate(HTTPMessageDelegate):
    def __init__(self, connection):
        self.connection = connection

    def finish(self):
        self.connection.write_headers(
            ResponseStartLine("HTTP/1.1", 200, "OK"),
            HTTPHeaders({"Content-Length": "2"}),
            b"OK")
        self.connection.finish()


class CustomRouter(Router):
    def find_handler(self, request, **kwargs):
        # some routing logic providing a suitable HTTPMessageDelegate instance
        print(type(request))  # HTTPServerRequest
        print(request.connection)
        return MessageDelegate(request.connection)


router = RuleRouter([
    Rule(PathMatches("/router.*"), CustomRouter())
])

if __name__ == \'__main__\':
    server = HTTPServer(router)
    server.listen(8888)
    IOLoop.current().start()

路由分发APP

from tornado.httpserver import HTTPServer
from tornado.routing import RuleRouter, Rule, PathMatches, Router
from tornado.web import RequestHandler, Application
from tornado.ioloop import IOLoop


class Handler1(RequestHandler):
    def get(self):
        self.write(\'1\')


class Handler2(RequestHandler):
    def get(self):
        self.write(\'2\')


app1 = Application([
    (r"/app1/handler", Handler1),
    # other handlers ...
])

app2 = Application([
    (r"/app2/handler", Handler2),
    # other handlers ...
])

router = RuleRouter([
    Rule(PathMatches("/app1.*"), app1),
    Rule(PathMatches("/app2.*"), app2)
])

if __name__ == \'__main__\':
    server = HTTPServer(router)
    server.listen(8888)
    IOLoop.current().start()

 

根据域名匹配

from tornado.httpserver import HTTPServer
from tornado.routing import RuleRouter, Rule, PathMatches, Router, HostMatches
from tornado.web import RequestHandler, Application
from tornado.ioloop import IOLoop


class Handler1(RequestHandler):
    def get(self):
        self.write(\'1\')


router = RuleRouter([
    Rule(HostMatches(\'monitor.com\'),
         RuleRouter([Rule(PathMatches(\'/app1.*\'), Application([(r\'/app1/handler1\', Handler1)]))])),
    Rule(HostMatches(\'test.monitor.com\'),
         RuleRouter([Rule(PathMatches(\'/app1.*\'), Application([(r\'/app1/handler1\', Handler1)]))])),
])

if __name__ == \'__main__\':
    server = HTTPServer(router)
    server.listen(8888)
    IOLoop.current().start()

 

分类:

技术点:

相关文章:

  • 2021-10-15
  • 2022-02-03
  • 2021-06-26
  • 2021-12-05
  • 2021-11-02
  • 2021-10-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2022-02-24
相关资源
相似解决方案