webserver.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:reahl 作者: reahl 项目源码 文件源码
def handle(self):
        # A modified copy of simple_server.WSGIRequestHandler.handle
        #
        # We first check if there really IS something to read on the socket
        # because as soon as ReahlWSGIServer.connection_is_pending becomes
        # true, A SingleWSGIRequestHandler is created already. However, the
        # fact that the browser made a connection does not mean it has sent
        # HTTP requests yet. So, we cannot really serve yet.
        #
        # We first check whether something has actually arrived here by
        # temporarily setting a timeout on the socket to read the first byte.
        # We suspect that the browser connects eagerly (pre-connect) before it
        # has a request to send in order to gain a speed benefit. 
        #
        # We also use this override to use our PatchedServerHandler instead of
        # ServerHandler to handle HTTP requests.
        try:
            self.request.settimeout(0.1)
            self.raw_requestline = self.rfile.read(1)
        except (socket.timeout, ssl.SSLError):
            return
        finally:
            self.request.settimeout(None)

        self.raw_requestline = self.raw_requestline + self.rfile.readline(65536)
        if len(self.raw_requestline) > 65536:
            self.requestline = ''
            self.request_version = ''
            self.command = ''
            self.send_error(414)
            return

        if not self.parse_request(): # An error code has been sent, just exit
            return

        handler = PatchedServerHandler(
            self.rfile, self.wfile, self.get_stderr(), self.get_environ()
        )
        handler.request_handler = self      # backpointer for logging
        handler.run(self.server.get_app())
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号