当前位置:  开发笔记 > 前端 > 正文

龙卷风Web和持久连接

如何解决《龙卷风Web和持久连接》经验,为你挑选了1个好方法。

如何在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()

完成后执行调用回调.

是我的正确的权利,事情那样post会多次调用,一个连接数将增加每个来自客户端的httprequest?但对于每个连接,我将有单独的计数值?



1> Kyle Johnson..:

我不认为你的假设是正确的.我对Tornado服务器工作方式的理解是来自客户端的每个请求都会产生一个新的RequestHandler.的宗旨,@tornado.web.asynchronous装饰是为了防止服务器将自动关闭连接,当你处理函数(post,get等等)的回报.但在一天结束时,我认为每个请求只有一个响应.

我不相信客户端的其他请求将转到RequestHandler类的同一个实例.相反,我的理解是龙卷风的设立是为了允许长轮询范式.以下是通信流程的示例:

    客户端POST向Tornado服务器发出请求

    Tornado服务器检查响应是否准备好,如果没有,您可以添加RequestHandler到某种堆栈或队列(取决于您的应用程序架构)

    服务器提供响应(可能是另一个用户向队列添加了需要分发给打开的连接的消息等)并将响应分发回RequestHandler然后调用该finish()函数来关闭连接

    客户再次POST请求重复该过程

我想如果你想实现真正的持久连接,你会想要研究tornado.websocket(http://www.tornadoweb.org/documentation/websocket.html).我还没有试过那个模块,所以我担心我不能在那里提供任何意见.

祝你好运!

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有