我对Python还很陌生,正试图编写一个相当简单的EventSource服务器,以便在5秒内吐出一些数据(目前只是一个测试字符串)。当我连接到javascript客户端时,它工作得很好,但最终开始产生SSL错误。这些错误似乎不会阻止脚本继续工作,ES消息也会继续发送,但理想情况下,我想找到一个解决方案。
我的代码如下:
import json
import time
from flask import Flask, Response
from flask_sslify import SSLify
app = Flask(__name__)
sslify = SSLify(app)
@app.route('/events')
def events():
def generate():
while True:
yield "data: hi there\n\n"
time.sleep(5)
response = Response(generate(), content_type='text/event-stream')
response.headers['Access-Control-Allow-Origin'] = 'https://example.com'
return response
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=4443, ssl_context=('server.crt', 'server.key'))
当我运行该代码并通过浏览器访问时,我会收到以下错误(似乎是随机重复发生的):
D:\WebRoot\Python>py ESServer.py
* Serving Flask app 'ESServer'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on https://127.0.0.1:4443
* Running on https://x.x.x.x:4443
Press CTRL+C to quit
* Debugger PIN: 115-453-164
10.7.102.201 - - [21/Feb/2024 15:32:12] "GET /events HTTP/1.1" 200 -
10.7.102.201 - - [21/Feb/2024 15:34:55] "GET /events HTTP/1.1" 200 -
Error on request:
Traceback (most recent call last):
File "D:\Python311\Lib\site-packages\werkzeug\serving.py", line 362, in run_wsgi
execute(self.server.app)
File "D:\Python311\Lib\site-packages\werkzeug\serving.py", line 326, in execute
write(data)
File "D:\Python311\Lib\site-packages\werkzeug\serving.py", line 298, in write
self.wfile.write(hex(len(data))[2:].encode())
File "D:\Python311\Lib\socketserver.py", line 834, in write
self._sock.sendall(b)
File "D:\Python311\Lib\ssl.py", line 1241, in sendall
v = self.send(byte_view[count:])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Python311\Lib\ssl.py", line 1210, in send
return self._sslobj.write(data)
^^^^^^^^^^^^^^^^^^^^^^^^
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2423)
我不确定这是客户端的问题还是服务器端的问题;也不知道是MY代码的问题还是SSL库本身的问题。FWIW我安装了最新版本的烧瓶和烧瓶。