Я пытаюсь настроить веб-приложение, которому требуется соединение WebSocket и которое должно передавать локальные файлы mp4 своим клиентам.
Я использую Flask 1.0.2, Flask-SocketIO 3.0.2 и Eventlet 0.24.1 для выполнения этой работы, и я читаю на документах на флешку-сокет , что если вы запустите ваш Flaskприложение с socketio.run(app)
у вас должен быть готовый к работе веб-сервер.
Итак, я установил минимальный сервер, который должен обслуживать файлы mp4 и HTML-страницу, которая должна их показывать - и это работает, но каждый раз, когда клиентотправляет HTTP-запрос 206, потому что кто-то просматривал видео, эта ошибка появляется на консоли Python:
Traceback (most recent call last):
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\hubs\selects.py", line 55, in wait
listeners.get(fileno, noop).cb(fileno)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\greenthread.py", line 219, in main
result = function(*args, **kwargs)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\wsgi.py", line 789, in process_request
proto.__init__(conn_state, self)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\wsgi.py", line 345, in __init__
self.finish()
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\wsgi.py", line 703, in finish
BaseHTTPServer.BaseHTTPRequestHandler.finish(self)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\socketserver.py", line 781, in finish
self.wfile.close()
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\socket.py", line 607, in write
return self._sock.send(b)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\greenio\base.py", line 395, in send
return self._send_loop(self.fd.send, data, flags)
File "C:\Users\Fabrizio\AppData\Local\Programs\Python\Python37-32\lib\site-packages\eventlet\greenio\base.py", line 382, in _send_loop
return send_method(data, *args)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine.
Removing descriptor: 920
Эта ошибка не прерывает работу сервера или, по-видимому, не вызывает никаких проблем, нозаполняет консоль этими трассировками стека, и это действительно раздражает.Вот структура проекта:
/ test:
| ____ a.mp4
| ____ index.html
| ____ test.py
a.mp4 - это пример видео, и для воспроизведения этой ошибки оно должно быть довольно длинным, поскольку в противном случае файл загружается мгновенно, без частичных запросов.
index.html
<video width="720" src="http://127.0.0.1:5000/a.mp4" controls></video>
test.py
from flask import Flask, send_from_directory
from flask_socketio import SocketIO
app = Flask(__name__)
socketio = SocketIO(app)
@app.route("/")
def index():
return send_from_directory("","index.html")
@app.route("/a.mp4")
def video():
return send_from_directory("","a.mp4")
if __name__ == "__main__":
socketio.run(app)
Есть ли способ отловить эти ошибки или исправить их без использования другого http-сервера?