以下是我的问题的最简单示例:
发出请求后,它将打印Request via GET <__main__.MainHandler object at 0x104041e10>
,然后请求将保持打开状态。好的!MainHandler.get
但是,当您发出另一个请求时,它在第一个连接完成之前不会调用该方法。
如何让多个请求进入get
方法,同时让它们保持长轮询。我正在为每个请求传递参数,这些参数将通过 redis 从发布/订阅中获得不同的结果。问题是我一次只能连接一个。怎么了?为什么这会阻止其他请求?
import tornado.ioloop
import tornado.web
import os
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
print 'Request via GET', self
if __name__ == '__main__':
application = tornado.web.Application([
(r"/", MainHandler)])
try:
application.listen(int(os.environ.get('PORT', 5000)))
tornado.ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
tornado.ioloop.IOLoop.instance().stop()
左图:如上述问题所述。请求未按右图中请求的方式处理。 右图我需要由 RequestHandler 处理请求(广告),然后等待发布/订阅发布他们的数据。
A B C D + + + + ++ abcd | | | | || + + + + | | | | || | | | | | | | | || | | | | | | | | || | | | | | vvv || | | | | +---|------------------+ || +-----|----|---|---|------------------+ | | | || | | | | | | | + 请求处理程序| || | + + + + 请求汉。| | | | || | | | | | | +---|------------------+ || +-----|----|---|---|------------------+ +---|------------------+ || +-----|----|---|---|------------------+ | | | || | | | | | | | + Sub/Pub Qu | || | v + vv 阙 | | | | || | | | +---|------------------+ || +---------|--------------+ +---|------------------+ || +---------|--------------+ | || | | 完成|| | 完成的 v || v || || || || || || || ++
如果这可以用另一种编程语言完成,请告诉我。
谢谢您的帮助!