如何限制龙卷风websocket消息大小

时间:2017-11-22 14:30:44

标签: python websocket tornado

我在龙卷风中编写了一个websocket服务器,并在收到消息时调用on_message方法。问题是,消息大小不受限制,换句话说,通过从客户端向websocket发送大量数据(消息)来打开项目攻击,它使服务器端内存满。必须有一个选项来限制传入的邮件大小,是吗?如果没有,我需要做些什么来避免这样的错误?

这是我的代码,只能获得长度不到128字节的消息,但它似乎不起作用。

class ClientWebSocketConnectionHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print "Connection is opened"

    def on_message(self, message):
        print message

    def on_close(self):
        print "closed"

handlers = [(r'/', ClientWebSocketConnectionHandler)]
tornado.web.Application.__init__(self, handlers)
TheShieldsWebSocket = MainApplication()
server =tornado.httpserver.HTTPServer(TheShieldsWebSocket,max_body_size=128)
server.listen(8080)

2 个答案:

答案 0 :(得分:0)

看一下这里的文档:

http://www.tornadoweb.org/en/stable/http1connection.html#tornado.http1connection.HTTP1Connection.set_max_body_size

为将来证明这一链接而言:

  

set_max_body_size(MAX_BODY_SIZE)[源]

     

设置单个请求的正文大小限制。

     

覆盖HTTP1ConnectionParameters的值。

答案 1 :(得分:0)

从版本4.5开始,如果Tornado在单个websocket框架(消息)中收到超过10 MiB的数据,它将自动关闭连接。因此,您不必担心有人会在一条消息中发送大量数据。您可以在source code中看到这一点。它也在最后一段的WebsocketHandler文档中提到过。

如果您想更改默认帧限制,可以向Application类传递一个名为websocket_max_message_size的参数,其大小以字节为单位。

app = tornado.web.Application(
      # your handlers etc,
      websocket_max_message_size=128
)