Python 基于异步mongoDB查询不断更新表
我试图编写一个网页,从mongoDB中提取数据,并根据返回的值更新一个表。目前,我可以使用motor查询mongoDB,并异步处理每条消息。然而,我只能写一次每负载的页面。我想知道是否有一种方法可以设置tornado,只要页面打开,就可以继续从mongoDB中拉出?这就是我目前的每页工作负载,但我不确定如何根据mongoDB的更新时间动态更新工作负载Python 基于异步mongoDB查询不断更新表,python,node.js,mongodb,asynchronous,tornado,Python,Node.js,Mongodb,Asynchronous,Tornado,我试图编写一个网页,从mongoDB中提取数据,并根据返回的值更新一个表。目前,我可以使用motor查询mongoDB,并异步处理每条消息。然而,我只能写一次每负载的页面。我想知道是否有一种方法可以设置tornado,只要页面打开,就可以继续从mongoDB中拉出?这就是我目前的每页工作负载,但我不确定如何根据mongoDB的更新时间动态更新工作负载 import tornado.ioloop, tornado.web, motor class LoadHandler(tornado.web.
import tornado.ioloop, tornado.web, motor
class LoadHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
db = self.settings['db']
self.write('''
<<!doctype html>
<html lang="en">
<head>
<title>Coin Info</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type=text/javascript src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style>
div.table {border: 1px solid black; display: table; width: 500px;}
div.row {border: 1px solid black; display: table-row; }
div.cell {border: 1px solid black; display: table-cell; }
div.wrapper { float: left;width: 200px; }
</style>
</head>
<body>
<div class="wrapper">
<div class="table">
<div class="header">
<div class="cell">Name</div>
<div class="cell">Item1</div>
<div class="cell">Item2</div>
<div class="cell">Item3</div>
</div>
''')
db.posts.find().sort([('_id',-1)]).each(self._got_message)
def _got_message(self, message,error):
if error:
raise tornado.web.HTTPError(500, error)
elif message:
self.write('<div class="row">')
self.write('<div class="cell" data-name={0}>{0}</div>'.format(message['values']['name']))
self.write('<div class="cell" data-item1={0}>{0}</div>'.format(message['item1']))
self.write('<div class="cell" data-item2={0}>{0}</div>'.format(message['values']['item2']))
self.write('<div class="cell" data-item3={0}>{0}</div>'.format(message['values']['item3']))
self.write('</div>')
else:
self.write('</div></div></div></div></body>')
self.finish()
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.write('here')
self.finish()
db = motor.MotorClient().current_db
application = tornado.web.Application([
(r'/load/', LoadHandler),
(r'/', MainHandler)
], db=db
)
print('Listening on http://localhost:5000')
application.listen(5000)
tornado.ioloop.IOLoop.instance().start()
导入tornado.ioloop、tornado.web、motor
类LoadHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(自我):
db=自我设置['db']
self.write(“”)
服务器发送完响应后,常规HTTP连接就会关闭。因此,在连接关闭后,您无法向客户端发送任何数据
要向客户端发送实时数据更新,您可以使用Websocket。与常规HTTP连接不同,Websocket连接可以随时保持打开状态,服务器可以随时向客户端发送数据
Tornado's是一款很好的Websockets入门软件。对于一些高级的东西,有一款聊天应用程序,可以随意使用