微信订阅号中关于消息排重的Tornado实现及在Tornado中如何判断微信服务器已终止第一个请求连接?
看到 微信公众开发文档 中,有关于 消息排重 的简要说明,细想一下,也确实明白其中的实现过程。但真正下手写代码的时候感觉还是一片荆棘。遇到的问题:
Tornado
中对于服务器请求关闭导致
Write error: [Errno 32] Broken pipe
,这个该如何解决,为什么用异常也没用,
Tornado
中有没有函数可判断微信服务器已终止一个请求连接???
try:
# ...
except IOError e:
# ...
mc = memcache.Client()
class WeixinHandler(tornado.web.RequestHandler):
def post(self):
# 省略文本解析...
key = msgId
if mc.get(key) == None:
mc.set(key, 1)
elif mc.get(key) == 1 or mc.get(key) == 2:
mc.incr(key)
if mc.get(key) == 1:
# 异常任务处理
elif mc.get(key) == 2:
# 无限等待 mc.get(key) != 2 and mc.get(key) != 3
elif mc.get(key) == 3:
if mc.get(key) == 3:
mc.set(key, u'任务无法完成')
else:
pass
else:
pass
self.write(mc.get(key))
mc.delete(key) # 每次请求都会调用,这样的话,一个失败的`write`(上面的
# 语句)就会导致其它的请求响应异常了。
夜猫zhi
10 years, 4 months ago