我是新来的(python,堆栈溢出,龙卷风),所以请耐心点。纠正我。
我和龙卷风在一个实时应用程序上工作。当我在Websocket处理程序类中调用self.close()时,不会触发on_close方法,这一次我做了一个小包装,修复了问题,并(例如)正确丢弃了连接的代理(纯avascript wss api客户端)。
所有的网络问题都被抛弃了,因为我糟糕的包装器在局域网环境中工作得很好。
有人也有同样的问题吗?没有解释我睡不着。
谢谢,真的。
## imports and other stuff
AGENTS = set()
class BackofficeWSSRailMain(tornado.websocket.WebSocketHandler):
def on_open(self):
pass
def on_message(self,raw_message):
json_msg=json.loads(raw_message)
login = function_that_process_login(json_msg)
if login == True:
AGENTS.add(self)
self.write_message("ok")
else:
self.write_message("nologin")
self.close() ### this part should fireup
### the on_close method but nothing
### happens so AGENT is not discarded.
### here is when i actually call on_close_wrapper(),
### the method below.
def on_close_wrapper(self):
self.close() ### this is my actual solution ,
### waiting for more research.
self.on_close()
def on_close(self):
AGENTS.discard(self)
## Calling ioloop ...
发布于 2014-01-14 19:56:27
只有当客户端关闭websocket连接的一侧时,才会执行self.on_close
。尝试一下:如果打开包含连接到服务器的Javascript客户端的网页,那么关闭页面,on_close
就会运行。如果在服务器代码中调用on_close
,则不应该运行self.close
。
包装器是解决问题的合理解决方案;也就是说,这是一种合理的方法,可以确保在调用self.close
或客户端断开连接时运行相同的代码。
发布于 2014-12-08 16:10:49
如前所述,只有当客户端关闭连接时才执行on_close()
,因此它是清理资源的好地方。
对于任何清理,请使用这里记录的on_finish()
方法,finish
https://stackoverflow.com/questions/21121436
复制相似问题