我有一个基本的websocket服务器,使用python中的Tornado框架。我想在服务器功能之间共享一个值:
class EchoWebSocket(websocket.WebSocketHandler): def check_origin(self, origin): return True def open(self): print ("connection opened") def on_close(self): tornado.ioloop.IOLoop.instance().stop() print ("connection closed") def on_message(self,message): print (message) def Main(): application = tornado.web.Application([(r"/", EchoWebSocket),]) application.listen(9000) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": Main()
我试图从这样的类创建全局对象:
class operate: state = "mutual" def __init__(self): self.state = 'mutual' def play(self): self.state = 'play' def pause(self): self.state = 'pause' def getStatus(self): return self.state
并调用一个全局对象,猜测由于该对象是全局的,所以不会每次消息都创建一个新对象:
def open(self): global objectTV objectTV = operate() objectTV.play() . . . . def on_message(self,message): global objectTV objectTV = operate() print(objectTV.getStatus())
在方法中 on_message() ,每次新消息到达时,您都在实例化 objectTV objectTv = operate() operate 类的初始状态设置为 'mutual' ,这就是它打印的原因 “相互”
on_message()
objectTV
objectTv = operate()
operate
'mutual'
“相互”
objectTV = operate() 线路自
objectTV = operate()
但是请阅读一些关于这个问题的答案: Why are global variables evil?
因此,解决问题的更好方法是在处理程序实例上设置局部属性:
class EchoWebSocket(websocket.WebSocketHandler): ... def open(self): self.objectTV = operate() self.objectTV.play() def on_message(self, message): print(self.objectTV.getStatus()) # -> 'play'