Is Tornado Is a Web Server?


Larry Thompson

Is Tornado a Web Server?

Tornado is a powerful web framework written in Python that can be used to develop scalable and high-performance web applications. While Tornado is often referred to as a web framework, it is important to note that it also includes a built-in web server. In this article, we will explore the capabilities of Tornado as a web server and how it can be used to handle incoming HTTP requests.

What is a Web Server?

Before diving into Tornado’s web server capabilities, let’s take a moment to understand what a web server actually is. A web server is a software application that processes incoming HTTP requests from clients (such as web browsers) and serves back the corresponding HTTP responses. It acts as an intermediary between clients and the application or resources they are requesting.

Tornado’s Built-in Web Server

Tornado stands out among other Python frameworks due to its built-in web server functionality. This means that you don’t need to rely on external servers like Apache or Nginx to run your Tornado applications.

Advantages of Using Tornado’s Built-in Web Server:

  • Simplicity: Tornado’s built-in web server simplifies the deployment process by eliminating the need for additional server configuration.
  • Performance: Tornado’s web server is designed for high performance and can handle thousands of simultaneous connections efficiently.
  • Scalability: Tornado supports non-blocking I/O which allows it to handle multiple requests concurrently, making it highly scalable.

Tornado as an Asynchronous Web Server

Tornado utilizes an asynchronous event-driven architecture, making it an ideal choice for building real-time applications. Unlike traditional web servers that use a thread per connection model, Tornado uses non-blocking I/O and a single-threaded event loop to handle multiple connections concurrently.

Tornado achieves this by utilizing coroutines and the asyncio library. By using coroutines, developers can write asynchronous code that doesn’t block the execution flow, allowing Tornado to efficiently handle multiple requests without the need for additional threads or processes.

Handling Requests with Tornado’s Web Server

To handle incoming HTTP requests, Tornado provides a powerful RequestHandler class that you can subclass to define your request handlers. This class provides methods for handling different types of HTTP requests such as GET, POST, PUT, DELETE, etc.

Here’s an example of a basic request handler in Tornado:


import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado!")

if __name__ == "__main__":
    app = tornado.Application([
        (r"/", MainHandler),


In the above example, we define a request handler class called MainHandler that handles GET requests. When a client sends an HTTP GET request to the root URL (“/”), the get() method is invoked and it writes “Hello, Tornado!” as the response.

Running the Tornado Web Server

To run your Tornado web server application, save the code in a file (e.g., and execute the following command in your terminal:


Once the server is running, you can access your application by visiting http://localhost:8888 in your web browser.


Tornado is not only a web framework but also includes a powerful built-in web server. It offers simplicity, high performance, and scalability, making it an excellent choice for developing real-time applications. By leveraging Tornado’s asynchronous capabilities and request handling mechanisms, developers can build efficient and robust web applications without relying on external servers.

If you’re looking to build fast and scalable web applications in Python, Tornado’s built-in web server is definitely worth exploring!

Discord Server - Web Server - Private Server - DNS Server - Object-Oriented Programming - Scripting - Data Types - Data Structures

Privacy Policy