在tornado中要使用异步的特性,tcpserver要做的通用的工作
1、创建一个socket、设置为非阻塞模式、在指定的端口监听
2、将该socket添加至ioloop中,并设置回掉函数
3、在回掉函数中accept客户端连接,并将创建的socket包装为iostream(这样可以更方便地用异步的方式读写socket)。
tornado.tcpserver.TCPServer的作用
帮我们完成上述通用的工作
tornado.tcpserver.TCPServer的事件循环
tornado中除了ioloop基础的事件循环外,很多组件也都可以看作是一个事件循环,这些事件循环归根结底都是由ioloop驱动的。上一篇中的iostream可以看作一个事件循环,tcpserver也可以看做一个事件循环,它只循环一种事件:tcp连接建立。
设置回调函数的方式与ioloop不同,上层通过继承tcpserver,重写handle_stream来设置回调函数。
应用举例
from tornado.tcpserver import TCPServer
from tornado import gen
class MyTCPConnection(object):
def __init__(self, stream, address):
self.stream = stream
self.address = address
@gen.coroutine
def start_serving(self, server):
while True:
#循环从stream中读取消息,每个消息以tha