Eng*_*ost 4 asynchronous tornado persistent-connection
如何在TornadoWeb中编写支持持久连接的Http服务器.
我的意思是将能够接收许多请求并在不关闭连接的情况下回答它们.它如何在异步中实际工作?
我只是想知道如何编写处理程序来处理持久连接.它究竟会如何运作?
我有这样的处理程序:
class MainHandler(RequestHandler):
count = 0
@asynchronous
def post(self):
#get header content type
content_type = self.request.headers.get('Content-Type')
if not content_type in ACCEPTED_CONTENT:
raise HTTPError(403, 'Incorrect content type')
text = self.request.body
self.count += 1
command = CommandObject(text, self.count, callback = self.async_callback(self.on_response))
command.execute()
def on_response(self, response):
if response.error: raise HTTPError(500)
body = response.body
self.write(body)
self.flush()
Run Code Online (Sandbox Code Playgroud)
完成后执行调用回调.
是我的正确的权利,事情那样post会多次调用,一个连接数将增加每个来自客户端的httprequest?但对于每个连接,我将有单独的计数值?
我不认为你的假设是正确的.我对Tornado服务器工作方式的理解是来自客户端的每个请求都会产生一个新的RequestHandler.的宗旨,@tornado.web.asynchronous装饰是为了防止服务器将自动关闭连接,当你处理函数(post,get等等)的回报.但在一天结束时,我认为每个请求只有一个响应.
我不相信客户端的其他请求将转到RequestHandler类的同一个实例.相反,我的理解是龙卷风的设立是为了允许长轮询范式.以下是通信流程的示例:
POST向Tornado服务器发出请求RequestHandler到某种堆栈或队列(取决于您的应用程序架构)RequestHandler然后调用该finish()函数来关闭连接POST请求重复该过程我想如果你想实现真正的持久连接,你会想要研究tornado.websocket(http://www.tornadoweb.org/documentation/websocket.html).我还没有试过那个模块,所以我担心我不能在那里提供任何意见.
祝你好运!
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |