示例#1
0
    def on_ssl_created_cb(self, ssl_sock, check_free_worke=True):
        if not ssl_sock:
            raise Exception("on_ssl_created_cb ssl_sock None")

        appid = appid_manager.get_appid()
        if not appid:
            time.sleep(60)
            ssl_sock.close()
            raise http_common.GAE_Exception(1, "no appid can use")

        ssl_sock.appid = appid
        ssl_sock.host = ssl_sock.appid + ".appspot.com"

        if ssl_sock.h2:
            worker = HTTP2_worker(ssl_sock, self.close_cb, self.retry_task_cb,
                                  self._on_worker_idle_cb)
            self.h2_num += 1
        else:
            worker = HTTP1_worker(ssl_sock, self.close_cb, self.retry_task_cb,
                                  self._on_worker_idle_cb)
            self.h1_num += 1

        self.workers.append(worker)

        self.wait_a_worker_cv.notify()

        if check_free_worke:
            self.check_free_worker()
示例#2
0
    def get_worker(self):
        best_rtt = 9999
        best_worker = None
        idle_num = 0
        for worker in self.workers:
            if not worker.accept_task:
                continue

            if worker.version == "1.1":
                idle_num += 1
            else:
                if len(worker.streams) == 0:
                    idle_num += 1

            rtt = worker.get_rtt_rate()

            if rtt < best_rtt:
                best_rtt = rtt
                best_worker = worker

        if idle_num == 0 or len(self.workers) < self.min_worker_num:
            self.create_more_worker()

        if best_worker:
            return best_worker

        ssl_sock = https_manager.get_ssl_connection()
        if not ssl_sock:
            raise http_common.GAE_Exception(1, "no ssl_sock")

        worker = self.on_ssl_created_cb(ssl_sock)

        return worker