繁体   English   中英

python龙卷风websocket服务器中的瓶颈

[英]bottleneck in python tornado websocket server

我有一个用python龙卷风编写的websocket服务器。 服务器将接收来自客户端的许多连接,并且您知道,我们有on_message函数,该函数会在收到on_message消息时触发。 因此,这是我的问题,如果一条消息(例如来自客户端的请求)需要5秒钟才能处理,那么当服务器正在处理某些请求时,服务器将进入阻止模式,并且无法接受或接收更多的连接或数据。 经过一些研究,我发现Asyncio可以解决我的问题,但我现在不知道要使用它。 那么,如何调用process方法以避免阻塞?

以下是我的代码:

class WavesClient(tornado.websocket.WebSocketHandler):
    def check_origin(self, origin):
        return True
    def open(self):
        print("New client connected")

   def on_message(self, message):
        self.process(message)

   def on_close(self):
        print("Client disconnected")
   def process(self,message):
        #it takes 5 sec to complete

我主要使用Tornado托管我的Web应用程序,因此我可以告诉您,如果Tornado中的代码的任何部分被阻止,则整个服务器都会被阻止。

现在到您的代码:

@tornado.gen.coroutine
def on_message(self, message):
    process_results = yield self.process(message)
    self.write_message(process_results)

@tornado.gen.coroutine
def process(self, message):
    # a long process, this is the equivalent of time.sleep(2) which is blocking
    yield tornado.gen.sleep(2)
    return 'finished'

使用tornado您必须从函数yield以获取返回值。 另外,如果函数要屈服,则必须使用tornado.gen.coroutine装饰器将其包装

这个问题和你的相似。 答案也是有益的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM