2016-02-14 10 views
10

Ich versuche, meine Flasche Webanwendung mit Websockets Mein Code läuft gut, aber wenn ich zwei oder mehrere Male Seite im Browser neu laden. Ich habe im Terminal OSError. Und dieser Fehler verhindert nicht, dass Flaschen arbeiten.OSError: rohe readinto() zurückgegeben ungültige Länge bei Verwendung von 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) 

Was bedeutet Fehler?

+0

Gibt es ein Update dazu? Ich habe denselben Fehler! – Benny

+0

Gleicher Fehler mit Nameko. – laike9m

+0

Gleicher Fehler: Öffnen Sie die Webapp mit IE11 und schließen Sie IE (nicht nur die Registerkarte, sondern das gesamte Programm) und ich bekomme die obige Traceback reproduzierbar. Bei Firefox oder Chrom tritt dieser Fehler nicht auf! –

Antwort

0

Blindschuss, aber dieses Verhalten wird höchstwahrscheinlich dadurch verursacht, dass der Webbrowser die Websocket-Verbindung beendet, bevor er etwas sendet. Das Aktualisieren des Browsers führt dazu, dass der Websocket seine TCP-Verbindung (sonst wieder verwendbar) schließt. Auf der Kolbenseite verursacht dies den OSError, der einige Bytes erwartet, aber beim Warten auf Daten beim Schließen des Sockets stirbt.

Mit anderen Worten: Nichts, was Sie tun können und eigentlich nicht schädlich.

0

Ich habe versucht, Fehler auf verschiedene Arten zu lösen, aber es hat nicht für mich funktioniert. Nach einiger Zeit habe ich Ubuntu neu installiert und mein Server hat angefangen zu arbeiten.

Wahrscheinlich Problem basierend auf Betriebssystem Sockets oder ich habe etwas nicht richtig installiert. Es hält mich falsch.

Hinterlasse diesen Kommentar, um jemandem zu helfen, aber es hat sich noch geöffnet und nicht vollständig gelöst.

Verwandte Themen