2015-01-12 38 views
0

我在使用Ajax和Websockets的项目上工作。任务是摆脱Ajax并仅使用Websockets。在服务器端,我使用了龙卷风和django以及tornado-url-dispatcher。我想重用django中使用websocket(tornado.websocket.WebSocketHandler)的单个实例定义的一些方法。这个类有3个默认的处理程序,但我通过添加新的处理程序来扩展它,这些处理程序重定向到现有的django方法,并修改了调度程序以指向新的方法。websocket [龙卷风]的单个实例可以处理不同的请求吗?

class WSHandler(tornado.websocket.WebSocketHandler): 
    def open(self): 
     ... 
    def on_message(self, message): 
     ... 
    def on_close(self): 
     ... 
    def new_handler_1(self, request): 
     ... 

tornado_app = tornado.web.Application(
    [ 
     (r'/ws/new_handler', wshandler.WSHandler.new_handler_1), 
     (r'/ws', wshandler.WSHandler), 
    ] 

我应该使用什么类型的响应来从new_handler_1方法回复通过websocket完成的请求?谢谢。

回答

0

你不能这样做;为每个请求创建一个处理程序类的新实例。相反,制作一些其他共享对象,处理程序可以使用它们自己进行通信。您可以通过将该对象附加到应用程序对象或将其作为参数initialize传递给处理程序来将该对象传递给处理程序。

+0

嗨!什么是共享对象,请详细介绍一下如何做到这一点?链接到源代码或代码片段也将有所帮助。谢谢。 –

+0

我只是指在启动时创建的某个对象,并存储在某处可供所有实例访问的对象。这可以像全局变量一样简单,比如https://github.com/tornadoweb/tornado/blob/stable/demos/chat/chatdemo.py中的MessageBuffer –

+0

您可以在其中放置任何东西;我通常会推荐使用回调对象而不是WSHandler本身(所以你可以支持混合websocket/long-polling的使用)。全局变量将成为多个处理程序回调的容器。 –