我在龙卷风中编写了一个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)
答案 0 :(得分:0)
看一下这里的文档:
为将来证明这一链接而言:
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
)