Python安全websocket内存消耗

时间:2013-11-19 17:45:55

标签: memory-leaks websocket twisted tornado autobahn

我正在python中编写一个Web套接字服务器。我尝试了下面的方法,包括txws,autobahn和tornado,都有类似的结果。

我似乎有大量的内存消耗和安全的websockets,我无法弄清楚这可能发生在何处或为何。下面是龙卷风的一个例子,但我可以提供高速公路或txws的例子。

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import json 

class AuthHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print 'new connection for auth'

    def on_message(self, message):
        message = json.loads(message)
        client_id = message['client_id']
        if client_id not in app.clients:
            app.clients[client_id] = self
        self.write_message('Agent Recorded')

    def on_close(self):
        print 'auth connection closed'


class MsgHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print 'new connection for msg'

    def on_message(self, message):
        message = json.loads(message)
        to_client = message['client_id']
        if to_client in app.clients:
            app.clients[to_client].write_message('You got a message')

    def on_close(self):
        print 'msg connection closed'


app = tornado.web.Application([
    (r'/auth', AuthHandler),
    (r'/msg', MsgHandler)
])

app.clients = {}


if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(app, ssl_options={
        'certfile': 'tests/keys/server.crt',
        'keyfile': 'tests/keys/server.key'
    })
    http_server.listen(8000)
    tornado.ioloop.IOLoop.instance().start()

在建立了大约10,000个连接之后,我发现我使用的是大约700MB的内存和SSL,而没有使用的是43MB,除非我终止这个过程,否则我永远不会回复。似乎问题与发送的连接数量密切相关,而不是发送的消息。

消费似乎独立于客户端(我编写了自己的客户端并尝试了其他客户端)。

安全的websockets真的比普通的websockets更加占用内存吗?或者我的服务器代码没有正确实现它?

1 个答案:

答案 0 :(得分:2)

我认为最好的解决方案是使用真实的网络服务器(nginx apache)作为代理,并让它管理ssl层。