如何限制龙卷风websocket消息的大小
问题内容:
我已经在龙卷风中编写了一个websocket服务器,并且on_message
在收到消息时调用了方法。问题是,消息的大小不受defualt的限制,也就是说,通过从客户端向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)
问题答案:
从版本4.5开始,如果Tornado在单个websocket框架(消息)中接收到10
MiB以上的数据,它将自动关闭连接。因此,您不必担心有人在一条消息中发送大量数据。您可以在源代码中看到这一点。WebsocketHandler
在倒数第二段的文档中也提到了它。
如果您想更改默认的帧限制,则可以向您的Application
类传递一个参数websocket_max_message_size
,该参数的大小以字节为单位。
app = tornado.web.Application(
# your handlers etc,
websocket_max_message_size=128
)