在没有POST错误的情况下启动flask-socketio

时间:2020-06-25 20:05:20

标签: python-3.x flask socket.io flask-socketio http-error

嗨(这是我的第一篇文章,因此对文章中的任何错误表示歉意。如果您能指出这些错误,我将不胜感激。)

我试图熟悉flask-socketio和socket.io(使用AWS C9接口),但是每当我尝试使用来启动程序时

flask run

在终端中,然后在浏览器中打开html文档,我收到一个错误列表(POST 400和GET 400的组合)。我在flask-socketio文档中看到,flask服务器不支持Web套接字(这是我要使用的)。

但是,我尝试使用来启动程序

python application.py

(这是某些Youtube指南所使用和工作的),但是当我尝试在浏览器中通过提供的网址打开html文件时出现连接错误(这与运行flask run时提供的网址不同) )。

eventlet和gevent,gevent-websocket与flask-socketio一样都安装在AWS工作区上。使用app.run()和socketio.run(app)的输出没有区别。

python代码是:

from flask import Flask, flash, jsonify, redirect, render_template, request, session
from flask_socketio import SocketIO, send, emit

app = Flask(__name__)
#need to create a secret key in order to use session -- so can keep data safe by encrypting using the key.
app.config['SECRET_KEY'] = "My secret!!"
socketio = SocketIO(app)


@app.route("/", methods = ["GET", "POST"])
def a():
    return render_template("b.html")


@socketio.on("my event")
def received(data):
    print("msg:" + data)



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

html文档:

<!DOCTYPE HTML>
<html>
    <head>
        <script src = "/static/tst.js"></script>



        <!--adding socketio connection-->
        <!-- from flask-socketio docs -->
        <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>

        <script type="text/javascript" charset="utf-8">
            var socket = io();

            socket.on('connect', function() {
                socket.emit('my event', {data: 'I\'m connected!'});
            });
        </script>

        <title>
            Testing Testing 123
        </title>

    </head>

    <p id = "changer">Change Me!</p>
    <button onclick = "nxt()">Change the paragraph?</button>

    <p>Message:</p>
    <p id = "next">None</p>

</html>

我使用烧瓶运行时收到的错误:

"GET /socket.io/?EIO=3&transport=polling&t=NBi-no4&sid=b44f8623ee1c40d5b6d6167413a1d078 HTTP/1.0" 400
"POST /socket.io/?EIO=3&transport=polling&t=NBi-rFw&sid=f077028cc43c41229f8e4e72cc64bc30 HTTP/1.0" 400

此外,我注意到application.py在使用轮询发送错误时发送数据(&transport = polling),因此我试图通过放置将其强制使用websockets

socket.io.opts.transports = ['websocket']

恰好位于html doc中的var socket的定义之下,但这也不起作用。 (以flask运行启动它仍然会导致一系列错误,而且我仍然使用python application.py从浏览器收到连接错误。)

Python错误:

终端中没有明显的: enter image description here

Firefox: enter image description here

Chrome: enter image description here

使用curl来测试连接:

在一个终端上:curl -v http://127.0.0.1:5000

> HEAD / HTTP/1.1
> Host: 127.0.0.1:5000
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 404 NOT FOUND
... 
* Connection #0 to host 127.0.0.1 left intact

在运行application.py的终端上:

(4760) accepted ('127.0.0.1', 40112)
127.0.0.1 - - [30/Jun/2020 00:42:01] "GET / HTTP/1.1" 404 341 0.001045

有什么建议吗?

0 个答案:

没有答案