python - 将简单的 Socket.io Flask 应用程序部署到 Google App Engine:仍未解决
问题描述
我正在尝试部署一个使用 socket.io 的小型烧瓶应用程序来托管一个小型实时聊天网站
我能够在本地成功运行它(127.0.0.1)
然后我用以下文件将它部署到谷歌应用引擎:
主文件
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)
@app.route('/')
def sessions():
return render_template('session.html')
def messageReceived(methods=['GET', 'POST']):
print('message was received!!!')
@socketio.on('my event')
def handle_my_custom_event(json, methods=['GET', 'POST']):
print('received my event: ' + str(json))
socketio.emit('my response', json, callback=messageReceived)
if __name__ == '__main__':
socketio.run(app, debug=True)
应用程序.yaml
runtime: python
network:
session_affinity: true
要求.txt
Flask==0.12.2
flask-socketio
eventlet==0.17.4
gunicorn==18.0.0
旁边是一个功能齐全的 HTML 页面,其中包含以下脚本:
<form action="" method="POST">
<input type="text" class="username" placeholder="User Name"/>
<input type="text" class="message" placeholder="Messages"/>
<input type="submit"/>
</form>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
<script type="text/javascript">
var socket = io.connect('https://' + document.domain + ':' + location.port);
socket.on( 'connect', function() {
socket.emit( 'my event', {
data: 'User Connected'
} )
var form = $( 'form' ).on( 'submit', function( e ) {
e.preventDefault()
let user_name = $( 'input.username' ).val()
let user_input = $( 'input.message' ).val()
socket.emit( 'my event', {
user_name : user_name,
message : user_input
} )
$( 'input.message' ).val( '' ).focus()
} )
} )
socket.on( 'my response', function( msg ) {
console.log( msg )
if( typeof msg.user_name !== 'undefined' ) {
$( 'h3' ).remove()
$( 'div.message_holder' ).append( '<div><b style="color: #000">'+msg.user_name+'</b> '+msg.message+ "\n" + '</div>' )
}
})
</script>
这是链接,您可以查看发生了什么:https ://flask-chat-for-mckenna.wl.r.appspot.com/
更新
将端点从 HTTP 更改为 HTTPS 后,我不再收到 405(谢谢 Simeon Nedkov!)似乎连接有问题?停止缓冲需要比平时更长的时间
所有代码都是最新的
提前致谢!
解决方案
该错误通知您浏览器拒绝访问不安全的端点。
当提供的页面https://...
尝试访问位于http://...
.
幸运的是,在这种情况下,您可以控制不安全的端点,并且可以通过更改来解决问题
var socket = io.connect('http://' + document.domain + ':' + location.port);
至
var socket = io.connect('https://' + document.domain + ':' + location.port);
推荐阅读
- python - 将计划信息(开始和结束时间)拆分为更小的间隔
- asp.net-mvc - 单击按钮时未选择 Casecading 下拉列表
- node.js - 为什么我会收到此错误:SyntaxError: Unexpected token T in JSON at position 0 at JSON.parse (
) 在 XMLHtt…, - geometry - In SwiftUI, how to determine a Circle()'s size to draw a overlay on scale with that circle?
- angular - 在 Angular 6/7 中获取 URL 参数的最佳方法
- javascript - 禁用 iFrame 内的外部内容加载
- python-3.x - sklearn NBClassifier 有一个意外的关键字参数“var_smoothing”
- python - 将文本应用到两个 tkinter RadioButtons
- python - Package not installing correctly to Python environment
- php - 如何在每个帖子中显示多个具有不同数字的元框?