停止tornado.TCPServer而不等待连接关闭

时间:2015-10-02 23:52:44

标签: python sockets tornado

tornado.tcpserver.TCPServer.stop的文档说:

  

服务器停止后,当前正在进行的请求可能仍会继续

但是,为了测试健壮性,我想模拟服务器的完全崩溃。

是否有一种首选方式可以突然终止tornado.TCPServer?特别是我想终止所有打开的套接字 ungracefully

修改

所以我不认为stop完全终止现有的连接。以下代码打印1, 2

from tornado import gen
from tornado.ioloop import IOLoop
from tornado.tcpserver import TCPServer
from tornado.tcpclient import TCPClient

port = 9000

class Server(TCPServer):
    @gen.coroutine
    def handle_stream(self, stream, address):
        while True:
            bytes = yield stream.read_bytes(5)
            yield stream.write(bytes)

server = Server()
server.listen(port)

@gen.coroutine
def client():
    client = TCPClient()
    stream = yield client.connect('127.0.0.1', port)
    yield stream.write(b'Hello')
    result = yield stream.read_bytes(5)
    assert result == b'Hello'
    print(1)

    server.stop()

    yield stream.write(b'Hello')
    result = yield stream.read_bytes(5)
    assert result == b'Hello'
    print(2)

IOLoop.current().run_sync(client)

1 个答案:

答案 0 :(得分:1)

TCPServer.stop完全符合您的要求;您引用的注释是TCPServer没有尝试正常关闭的警告。