在 Tornado 中,基于 IOStream 的 TCP 服务器可以通过使用 tornado.tcpserver.TCPServer 类来实现。下面是一个简单的示例,演示如何创建一个基于 IOStream 的 TCP 服务器:
import tornado.ioloop
import tornado.tcpserver
import tornado.gen

class MyTCPServer(tornado.tcpserver.TCPServer):
    async def handle_stream(self, stream, address):
        print(f"New connection from {address}")
        while True:
            try:
                data = await stream.read_until(b"\n")
                if not data:
                    print(f"Connection closed by {address}")
                    break
                # 处理接收到的数据
                self.handle_data(data, stream, address)
            except Exception as e:
                print(f"Error: {e}")
                break

    def handle_data(self, data, stream, address):
        # 在这里处理接收到的数据
        print(f"Received data from {address}: {data.decode().strip()}")

if __name__ == "__main__":
    server = MyTCPServer()
    server.listen(8888)
    print("TCP server listening on port 8888")
    tornado.ioloop.IOLoop.current().start()

在这个示例中,MyTCPServer 继承了 tornado.tcpserver.TCPServer 类,并实现了 handle_stream 方法来处理每个连接的 IOStream。在 handle_stream 方法中,通过异步方式读取数据,然后调用 handle_data 方法来处理接收到的数据。你可以在 handle_data 方法中添加自定义的处理逻辑。

要运行这个服务器,只需运行脚本并在浏览器或其他工具中连接到 localhost:8888,然后在终端中观察服务器的输出。
$ python my_tcp_server.py

这是一个基本的示例,你可以根据自己的需求添加更多的业务逻辑。在实际应用中,你可能需要更复杂的数据解析和处理、异常处理等。记得根据实际场景对异常情况进行适当的处理。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7439/Tornado