下面是一个简单的应用程序发送mesg到浏览器。如果redis通道有一个新的mesg,它将被发送,或者以非阻塞的方式发送最后知道的值。 但我做错了什么。有人能帮我理解吗
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方面,我只是使用一个简单的$.ajaxget来查看消息。
但是客户端http://localhost:5000/latestmessage
即使在redis更新之后也有旧消息。在
我建议您使用POST而不是GET作为http方法,这样可以消除缓存问题和浏览器(如chrome)的一些恼人行为,即第一个请求之后的请求将等待第一个请求完成后再发送到web服务器。在
如果您想保留GET方法,那么可以通过设置参数cache请求jquery使请求不可缓存
应该是缓存问题。在
您可以向从ajax发送的请求
http://localhost:5000/latestmessage?t=timestamp
添加时间戳或随机数。在相关问题 更多 >
编程相关推荐