1. 程式人生 > >tornado非同步原理(2)——高併發

tornado非同步原理(2)——高併發

如下程式碼所示,當tornado web server 的TCPSever接收到客戶端的socket時,會將該soket新增至ioloop監聽列表,

當socket可讀時,ioloop會呼叫回掉函式tcpserver._handle_connection()函式 —— tornado io非同步事件

class TCPServer(object):
    def listen(self, port, address=""):
        sock = bind_sockets(port, address=address)
        self.add_sockets(sock)

    
def add_sock(self, sock): if self.io_loop is None: self.io_loop = IOLoop.current() #IOLoop是個單例模式的類,通過該方法獲取例項 #將sock新增至ioloop的監聽列表,並且設定回掉函式為self._handle_connection,當sock中有tcp請求時,ioloop呼叫該回調函式 add_accept_handler(sock, self._handle_connection, io_loop=self.io_loop)

 

tornado底層通過epoll監聽其監聽列表中的所有soket,epoll是linux作業系統提供的監聽多個socket的介面,因為epool ioloop可以同時監聽上千個socket,加上ioloop的非同步機制使得tornado成為高併發的webserver。