如何在 Tornado 中使用 MongoDB 实现实时数据推送(real-time data push)?
在 Tornado 中使用 MongoDB 实现实时数据推送,需要先安装 pymongo 和 tornado.websocket 两个包。
下面是一个简单的示例代码,实现了一个简单的聊天室功能。
import tornado.ioloop import tornado.web import tornado.websocket import pymongo import datetime class ChatHandler(tornado.websocket.WebSocketHandler): clients = [] db = None def open(self): self.clients.append(self) if not self.db: self.db = pymongo.MongoClient().test_database messages = self.db.messages.find().sort('_id', pymongo.DESCENDING).limit(10) for message in reversed(list(messages)): self.write_message(message['content']) def on_message(self, message): data = { 'content': message, 'timestamp': datetime.datetime.utcnow() } self.db.messages.insert_one(data) for client in self.clients: client.write_message(message) def on_close(self): self.clients.remove(self) class Application(tornado.web.Application): def __init__(self): handlers = [ (r"/chat", ChatHandler), ] super(Application, self).__init__(handlers) if __name__ == "__main__": app = Application() app.listen(8888) tornado.ioloop.IOLoop.current().start()
在该示例中,每个客户端连接到聊天室时,都会查询 MongoDB 数据库中存储的最近 10 条消息,并发送给当前客户端。
当客户端发送消息时,将该消息插入 MongoDB 数据库中,并将该消息发送给所有客户端。如果还未连接到数据库,则会在第一次发送消息时自动连接。
需要注意的是,代码中使用了 pymongo DESCENDING 排序方式,以确保消息是按时间倒序排列的。
在运行该示例之前,可以通过以下命令安装所需的包:
pip install pymongo tornado
可以通过以下命令运行示例:
python server.py
在浏览器中打开 http://localhost:8888/,即可看到聊天室应用。
相关文章