2013-01-06 1 views
4

SSL을 사용하는 서버가 gevent.pywsgi이고 Internet Explorer 또는 Chrome을 사용하는 경우 트래픽 양은 10 배에서 100 배까지이며 전송 속도는 매우 느립니다. 그래도 Firefox가 괜찮습니다. 대신 stunnel을 사용하여 동일한 인증서로 SSL을 제공하면 모든 것이 잘 동작합니다.GEvent PyWSGI SSL이 매우 느립니다.

여기 고립 된 테스트 케이스를 만들었어요 : http://dl.dropbox.com/u/7138409/Chrome-Test.zip

파이썬 2.6과 2.7 모두에서 다른 gevent 버전에서 발생합니다.

답변

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() 
: 여기

은 작업 예입니다