Ceci est un extrait de code simple qui répète systématiquement le problème que je rencontre. J'utilise Python 2.7.12, Flask 0.11, Flask-SocketIO 2.7.1 et gevent 1.1.2. Je comprends que c'est probablement un problème qui a été soulevé dans la liste de diffusion du paquet responsable, mais je ne peux pas déterminer lequel est responsable. Cependant, je suis sûr que c'est un problème avec gevent parce que c'est ce qui soulève l'exception.Pourquoi Flask + SocketIO + Gevent me donne-t-il des erreurs SSL EOF?
from flask import Flask
from flask_socketio import SocketIO
from gevent import monkey
monkey.patch_all()
import ssl
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app, async_mode='gevent')
@app.route('/')
def index():
return "Hello World!"
@socketio.on('connect')
def handle_connect_event():
print('Client connected')
if __name__ == '__main__':
socketio.run(app, host='127.0.0.1', port=8443,
certfile='ssl/server/server.cer', keyfile='ssl/server/server.key',
ca_certs='ssl/server/ca.cer', cert_reqs=ssl.CERT_REQUIRED,
ssl_version=ssl.PROTOCOL_TLSv1_2)
Et voici l'erreur que je reçois lorsque le client se connecte:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/gevent/greenlet.py", line 534, in
result = self._run(*self.args, **self.kwargs)
File "/usr/lib/python2.7/site-packages/gevent/baseserver.py", line 25, in
return handle(*args_tuple)
File "/usr/lib/python2.7/site-packages/gevent/server.py", line 126, in wr
ssl_socket = self.wrap_socket(client_socket, **self.ssl_args)
File "/usr/lib/python2.7/site-packages/gevent/_sslgte279.py", line 691, i
ciphers=ciphers)
File "/usr/lib/python2.7/site-packages/gevent/_sslgte279.py", line 271, i
raise x
SSLEOFError: EOF occurred in violation of protocol (_ssl.c:590)
<Greenlet at 0x7fdd593c94b0: _handle_and_close_when_done(<bound method WSGInd method WSGIServer.do_close of <WSGIServer a, (<socket at 0x7fdd590f4410 SSLEOFError
Mon système a également la version OpenSSL 1.0.2.j si cela aide. Toute réflexion sera apprécié!
Ce m'a été rapporté avant (voir https://github.com/miguelgrinberg/Flask-SocketIO/issues/88), mais jamais trouvé ce qui était la question. Il est tout à fait possible que ce soit un bug lié au gevent. Vous pouvez être en mesure de contourner ce problème si vous avez un serveur proxy que vous pouvez configurer pour mettre fin à votre SSL, car la personne dans le bogue signalé que j'ai lié l'a fait. – Miguel