1. 程式人生 > >tornado異步原理(2)——高並發

tornado異步原理(2)——高並發

pre 並且 linux socket serve lin linux操作系統 web bin

如下代碼所示,當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。

tornado異步原理(2)——高並發