2016-02-14 8 views
10

Próbuję przetestować moją aplikację sieciową w kolbie z websockets Mój kod działa dobrze, ale kiedy przeładowuję dwie lub więcej stron w przeglądarce. Mam w terminalu OSError. I ten błąd nie zapobiega pracy kolb.OSError: raw readinto() zwrócił nieprawidłową długość, gdy używam websockets

main.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Chat</title> 
    <script type="text/javascript" src="{{ url_for('static', filename='jquery-2.2.0.js') }}"></script> 
    <script type="text/javascript" src="{{ url_for('static', filename='socket.io.min.js') }}"></script> 
</head> 
<body> 

<script type="text/javascript" charset="utf-8"> 

    $(document).ready(function() { 

     var socket = io.connect('http://' + document.domain + ':' + location.port); 

     socket.emit('connect', {data: 'U connected'}); 

     socket.on('apply', function (e) { 
      console.log('it works'); 
       $('#log').append('<br>' + e.data + '<br>') 

     }); 

    }); 

</script> 

<h1 id="log"></h1> 
</body> 
</html> 

app.py

from flask_socketio import SocketIO, emit 
from flask import Flask, render_template 


app = Flask(__name__) 
app.config['SECRET_KEY'] = 'secret!' 
socket_io = SocketIO(app) 


@app.route('/') 
def index(): 
    return render_template('main.html') 


@socket_io.on('connect') 
def connect(): 
    emit('apply', {'data': "Connect"}) 

if __name__ == '__main__': 
    socket_io.run(app, debug=True) 

Traceback

Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/site-packages/eventlet/greenpool.py", line 82, in _spawn_n_impl 
    func(*args, **kwargs) 
    File "/usr/local/lib/python3.5/site-packages/eventlet/wsgi.py", line 703, in process_request 
    proto.__init__(sock, address, self) 
    File "/usr/local/lib/python3.5/socketserver.py", line 684, in __init__ 
    self.handle() 
    File "/usr/local/lib/python3.5/http/server.py", line 417, in handle 
    self.handle_one_request() 
    File "/usr/local/lib/python3.5/site-packages/eventlet/wsgi.py", line 315, in handle_one_request 
    self.raw_requestline = self.rfile.readline(self.server.url_length_limit) 
OSError: raw readinto() returned invalid length -1 (should have been between 0 and 8192) 

Co robi błąd oznacza?

+0

Czy jest jakaś aktualizacja w tej sprawie? Stoję w obliczu tego samego błędu! – Benny

+0

Ten sam błąd za pomocą nameko. – laike9m

+0

Ten sam błąd: Otwórz aplikację internetową za pomocą IE11 i zamknij IE (nie tylko kartę, ale cały program) i mogę odtworzyć powyższe informacje zwrotne. W przeglądarce Firefox lub chrom ten błąd nie występuje! –

Odpowiedz

0

Niewidoczne ujęcie, ale takie zachowanie jest najprawdopodobniej spowodowane przez przeglądarkę internetową kończącą połączenie z siecią Web przed wysłaniem czegokolwiek. Odświeżenie przeglądarki prawdopodobnie spowoduje, że websocket zamknie to (w innym wypadku wielokrotnego użytku) połączenie TCP. Po stronie skrzynki powoduje to OSError, który oczekuje niektórych bajtów, ale umiera podczas oczekiwania na dane, gdy gniazdo jest zamknięte.

Innymi słowy: Nic, co można zrobić i faktycznie nie jest szkodliwe.

0

Próbowałem rozwiązać błąd na różne sposoby, ale nie zadziałało to dla mnie. Po pewnym czasie ponownie zainstalowałem Ubuntu i mój serwer zaczął działać.

Prawdopodobnie problem wynika z gniazd systemu operacyjnego lub nie zainstalowałem czegoś poprawnie. Pozostawia mi to nieporozumienie.

Zostawiając te komentarze, aby pomóc komuś, ale wciąż jest otwarty i nie został w pełni rozwiązany.

Powiązane problemy