【发布时间】:2013-04-03 03:03:39
【问题描述】:
下面是一个向浏览器发送消息的简单应用。如果有来自 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 来查看消息。
但是客户端http://localhost:5000/latestmessage 即使在redis 更新之后也有旧消息。
【问题讨论】: