tornado異步原理(2)——高並發
阿新 • • 發佈:2018-11-03
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)——高並發