微信订阅号中关于消息排重的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`(上面的
                       # 语句)就会导致其它的请求响应异常了。

python 微信 tornado

夜猫zhi 10 years, 4 months ago

Your Answer