断开龙卷风中的事件长轮询聊天
我正在开发一个在后端使用Tornado的聊天应用程序.我使用长轮询来获取在线用户的数量以及服务器上可用的任何新聊天消息.我已经与服务器打开了两个长轮询连接.
虽然很容易检测到用户何时上线. class OnlineHandler(BaseHandler): online = [] identifier = [] user = [] time = [] @tornado.web.asynchronous def post(self): random = self.get_argument("random",None) self.online_user(self.get_current_user(),self.retuser,random) def online_user(self,u,callback,random): cls = OnlineHandler if u not in cls.user: cls.time.append(time.time()) cls.user.append(u) else: index = cls.user.index(u) cls.time[index] = time.time() cls.online.append(callback) if random not in cls.identifier: # new user connected cls.identifier.append(random) logging.info("Sending online list to %r users",len(cls.online)) for callback in cls.online: try: callback(cls.user) except: logging.error("Error in online user callback",exc_info=True) cls.online = [] 解决方法
我看不到你删除cls.user的位置.以下是我的长轮询代码:
class LongPollingHandler(tornado.web.RequestHandler): '''push to the client''' def _on_finish(self,response): global online,count,ipollcount gone = self.request.connection.stream.closed() print (self.user +" => " + str(gone)) if gone: online.remove(self.user) return self.write("welcome %s,current online number(s) %s" % (self.user,response.body)) ??????????self.finish() 但是我刚刚在openshift的托管上遇到了问题(当客户端消失时我的localhost就可以了),我不知道龙卷风是否在代理后面,代理是否会切断客户端之后的连接.我也在寻找答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |