嗨(这是我的第一篇文章,因此对文章中的任何错误表示歉意。如果您能指出这些错误,我将不胜感激。)
我试图熟悉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错误:
使用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
有什么建议吗?