2016-02-14 5 views
10

私のフラスコウェブアプリケーションをウェブソケットでテストしようとしました 私のコードはうまく動作しますが、ブラウザで2回以上ページをリロードします。私はOSErrorをターミナルに持っています。そしてこのエラーはフラスコの作業を妨げません。OSError:raw readinto()が長さを返しました。ウェブソケット使用時に

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 (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) 

エラーは何を意味するのでしょうか?

+0

これに関する更新情報はありますか?私は同じエラーに直面している! – Benny

+0

namekoを使用して同じエラーが発生しました。 – laike9m

+0

同じエラー:IE11でwebappを開き、IEだけでなくタブ全体でもありますが、上記のトレースバックを再現できます。 Firefoxやクロムでこのエラーは発生しません! –

答えて

0

ブラインドショットですが、この動作はwebbrowserが何かを送信する前にwebsocket-connectionを終了したことが原因です。ブラウザを更新すると、おそらくwebsocketが(それ以外は再利用可能な)tcp接続を閉じます。フラスコ側では、OSErrorが発生します。OSErrorは、いくつかのバイトを必要としますが、ソケットが閉じられるとデータを待機する間に終了します。

言い換えれば、あなたは何もできず、実際には有害ではありません。

0

さまざまな方法でエラーを解決しようとしましたが、うまくいきませんでした。 しばらくすると、私はUbuntuを再インストールし、私のサーバーが動作し始めました。

おそらく、オペレーティングシステムソケットに基づく問題か、何かを正しくインストールしていない可能性があります。それは私に誤解をもたらします。

誰かを助けるためにこのコメントを残しても、まだ開いていて完全に解決されていません。

関連する問題