以下是一个简单的应用程序,用于向浏览器发送消息。如果来自Redis通道的新消息,则以非阻塞方式发送,否则发送最后已知的值。
但我做错了什么。能否有人帮助我理解?
在 JavaScript 方面,我只是使用了一个简单的 $.ajax get 方法来查看消息。 但是即使在 Redis 更新后,客户端
from gevent import monkey, Greenlet
monkey.patch_all()
from flask import Flask,render_template,request,redirect,url_for,abort,session,Response,jsonify
app = Flask(__name__)
myglobaldict = {'somedata':''}
class RedisLiveData:
def __init__(self, channel_name):
self.channel_name = channel_name
self.redis_conn = redis.Redis(host='localhost', port=6379, db=0)
pubsub = self.redis_conn.pubsub()
gevent.spawn(self.sub, pubsub)
def sub(self,pubsub):
pubsub.subscribe(self.channel_name)
for message in pubsub.listen():
gevent.spawn(process_rcvd_mesg, message['data'])
def process_rcvd_mesg(mesg):
print "Received new message %s " % mesg
myglobaldict['somedata'] = mesg
g = RedisLiveData("test_channel")
@app.route('/latestmessage')
def latestmessage():
return Response(myglobaldict,mimetype="application/json")
if __name__ == '__main__':
app.run()
在 JavaScript 方面,我只是使用了一个简单的 $.ajax get 方法来查看消息。 但是即使在 Redis 更新后,客户端
http://localhost:5000/latestmessage
仍然显示旧的消息。
SEND_FILE_MAX_AGE_DEFAULT
设置为1(或任何足够低的值)。 - mtth