4

我正在使用gevent.pywsgi带有 SSL 的服务器,当使用 IE 或 Chrome 时,流量在内容大小的 10 倍到 100 倍之间,传输速度非常非常慢。Firefox 对此表示满意。如果我改用stunnel提供 SSL(具有相同的证书),一切正常。

我在这里做了一个独立的测试用例:http: //dl.dropbox.com/u/7138409/Chrome-Test.zip

发生在 Python 2.6 和 2.7 以及不同的 gevent 版本上。

4

1 回答 1

3

这个错误的愚蠢是压倒性的。首先,我使用 Wireshark 剖析了流,令我惊讶的是,我看到响应的每个字节都在其自己的 SSL 段中传输。问题变成了我从我的 WSGI 处理程序返回原始字节串,而正确的方法是将它们返回包含在一个列表中!

这是一个工作示例:

import gevent
import gevent.pywsgi


ssl = {
    'certfile':  'ajenti.crt',
    'keyfile': 'ajenti.key',
    'ciphers': 'RC4',
}

def dispatch(env, s_r):
    s_r('200 OK', [('Content-Type', 'text/plain')])
    s = 'a' * 1000
    return [s]

server = gevent.pywsgi.WSGIServer(
    ('0.0.0.0', 8001),
    application=dispatch,
    **ssl
)

server.serve_forever()
于 2014-02-10T16:57:30.023 回答