以下是一个简单的示例,演示了如何在 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