2016-02-14 20 views
10

我嘗試測試使用WebSockets 我的代碼運行以及我的燒瓶的Web應用程序,但是當我重裝兩次或更多次頁面瀏覽器。我在終端OSError。而這個錯誤並不能阻止燒瓶工作。OSERROR:原料readinto()返回長度無效時使用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 (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的Web應用程序,並關閉IE瀏覽器(不只是選項卡,但整個程序),我得到可重現的上述回溯。使用Firefox或鉻不會發生此錯誤! –

回答

0

盲拍,但這種行爲很可能是由web瀏覽器發送終止任何東西之前WebSocket的連接造成的。刷新瀏覽器可能會導致websocket關閉它(否則可重用)的tcp連接。在燒瓶端,這會導致OSError,它需要一些字節,但在套接字關閉時等待數據時會死掉。

換句話說:你無能爲力,實際上沒有害處。

0

我試圖通過各種方式來解決錯誤,但它並沒有爲我工作。 因此過了一段時間後,我重新安裝了Ubuntu,並且我的服務器開始工作。

可能是基於操作系統套接字的問題,或者我沒有正確安裝某些東西。它一直讓我誤解。

離開這條評論幫助某人,但它仍然打開並沒有完全解決。