def _threaded()

in apisix/runner/server/server.py [0:0]


def _threaded(r: RPCRequest):
    while True:
        try:
            buffer = r.conn.recv(PROTOCOL_HEADER_LEN)
            protocol = NewServerProtocol(buffer, 0)
            err = protocol.decode()
            if err.code != RESP_STATUS_CODE_OK:
                r.log.error(err.message)
                break

            r.request.ty = protocol.type
            r.log.info("request type:{}, len:{}", protocol.type, protocol.length)

            r.request.data = r.conn.recv(protocol.length)
            handler = NewServerHandle(r)
            response = handler.dispatch()
            protocol = NewServerProtocol(response.Output(), protocol.type)
            protocol.encode()

            r.log.info("response type:{}, len:{}", protocol.type, protocol.length)

            r.conn.sendall(protocol.buffer)
        except socket.timeout as e:
            r.log.info("connection timout: {}", e.args.__str__())
            break
        except socket.error as e:
            r.log.error("connection error: {}", e.args.__str__())
            break

    r.conn.close()
    del r