Esempio n. 1
0
    def process_connection(self, connection):
        with connection:
            r = b''
            while True:
                content = connection.recv(1024)
                r += content
                if len(content) != 1024:
                    break
            log('request log:\n <{}>'.format(r))
            r = r.decode()
            if r:
                request = Request(r)
                response = Response()

                m_num = len(self.middlewares)
                if m_num > 0:
                    # 下一个中间件的 index
                    next_i = 0
                    def next():
                        nonlocal next_i
                        if next_i == m_num:
                            self.handle_path(request, response)
                        else:
                            m = self.middlewares[next_i]
                            next_i += 1
                            m(request, response, next)
                    next()
                else:
                    self.handle_path(request, response)

                # 把响应发送给客户端
                connection.sendall(response.toHttp())