【问题标题】:OSError: raw readinto() returned invalid length when use websocketsOSError: raw readinto() 在使用 websockets 时返回了无效的长度
【发布时间】:2016-05-25 11:49:09
【问题描述】:

我尝试使用 websockets 测试我的烧瓶 Web 应用程序 我的代码运行良好,但是当我在浏览器中重新加载两次或多次页面时。我在终端 OSError 中。而且这个错误并不妨碍烧瓶继续工作。

ma​​in.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)

错误是什么意思?

【问题讨论】:

  • 同样的错误:使用 IE11 打开 webapp 并关闭 IE(不仅仅是选项卡,而是整个程序),我得到了可重现的上述回溯。使用 Firefox 或 chromium 不会发生此错误!
  • 也许this 可以帮忙?

标签: python websocket


【解决方案1】:

盲拍,但这种行为很可能是由于 webbrowser 在发送任何内容之前终止 websocket-connection 造成的。刷新浏览器可能会导致 websocket 关闭它的(否则可重用的)tcp 连接。在烧瓶方面,这会导致 OSError,它需要一些字节,但在套接字关闭时等待数据时死亡。

换句话说:您无能为力而且实际上无害。

【讨论】:

    【解决方案2】:

    我尝试通过各种方式解决错误,但对我不起作用。 所以过了一段时间,我重新安装了 Ubuntu,我的服务器开始工作。

    可能是基于操作系统套接字的问题,或者我没有正确安装某些东西。它一直对我产生误解。

    离开这个 cmets 来帮助某人,但它仍然打开并没有完全解决。

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2013-07-24
      • 2021-02-21
      • 2022-06-18
      • 2011-07-26
      相关资源
      最近更新 更多