Tornado 与浏览器之间的双向通信通常通过 WebSocket 来实现。WebSocket 提供了一种在浏览器和服务器之间实时进行双向通信的方式,而 Tornado 提供了内置的 WebSocket 支持。

以下是一个简单的示例,演示了如何在 Tornado 中使用 WebSocket 与浏览器进行双向通信:

1. 服务器端(Tornado):
import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print("WebSocket opened")

    def on_message(self, message):
        self.write_message(f"You said: {message}")

    def on_close(self):
        print("WebSocket closed")

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

def make_app():
    return tornado.web.Application([
        (r'/websocket', WebSocketHandler),
        (r'/', MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    print("Server is running at http://localhost:8888")
    tornado.ioloop.IOLoop.current().start()

2. 客户端(HTML 文件,例如 index.html):
<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Example</title>
</head>
<body>
    <h1>WebSocket Example</h1>
    <input type="text" id="messageInput" placeholder="Type a message">
    <button onclick="sendMessage()">Send</button>
    <div id="output"></div>

    <script>
        var socket = new WebSocket("ws://localhost:8888/websocket");

        socket.onopen = function(event) {
            console.log("WebSocket opened");
        };

        socket.onmessage = function(event) {
            var outputDiv = document.getElementById("output");
            outputDiv.innerHTML = "Server says: " + event.data;
        };

        socket.onclose = function(event) {
            console.log("WebSocket closed");
        };

        function sendMessage() {
            var messageInput = document.getElementById("messageInput");
            var message = messageInput.value;
            socket.send(message);
        }
    </script>
</body>
</html>

在这个例子中,WebSocketHandler 处理器处理 WebSocket 连接,on_message 方法用于接收来自客户端的消息,并通过 write_message 方法将消息发送回客户端。在客户端的 HTML 文件中,使用 JavaScript 创建 WebSocket 连接,然后通过 send 方法发送消息,并在 onmessage 事件中处理来自服务器的消息。

确保 Tornado 版本支持 WebSocket,通常在 Tornado 4.0 之后的版本中已经内置了 WebSocket 支持。使用 WebSocket 可以实现实时的双向通信,非常适用于需要实时更新的应用,如聊天应用、实时数据展示等。


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