博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

tornado异步原理(2)——高并发

Posted on 2018-11-02 22:17  马顿  阅读(1035)  评论(0编辑  收藏  举报

如下代码所示,当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。