WinError 10053 с Flask-SocketIO и Eventlet - PullRequest
       80

WinError 10053 с Flask-SocketIO и Eventlet

0 голосов
/ 21 октября 2018

Я пытаюсь настроить веб-приложение, которому требуется соединение 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-сервера?

...