我建立了一个非常简单的flask应用,使用socketIO来制作一个简单的chatapp,在那里你可以写消息。在我的js文件中,我建立了一个函数,每隔几秒钟就会使用geolocation发送用户的当前位置。
因为我使用的是地理位置,所以我需要使用https而不是flask创建的http。
我发现了SSLify,并尝试了一下,但因为我也在使用socketIo,所以它在http上运行,而不是在https上。在没有socketIo的应用程序中,它可以工作,问题是什么?
这是我的flask应用。
from flask import Flask, render_template
from flask_socketio import SocketIO
from flask_sslify import SSLify
app = Flask(__name__)
app.config['SECRET_KEY'] = 'jsbcfsbfjefebw237u3gdbdc'
socketio = SocketIO(app)
sslify = SSLify(app)
@app.route('/')
def index():
return render_template('./ChatApp.html')
def messageRecived():
print('message was received!!!')
@socketio.on('my event')
def handle_my_custom_event(json):
print('recived my event: ' + str(json))
socketio.emit('my response', json, callback=messageRecived)
if __name__ == '__main__':
socketio.run(app, debug=True, host='0.0.0.0')
它不工作的原因是Flask-SSLify被应用到你的Flask应用中(你的应用程序的 app
实例),而不是Socket.IO(Socket.IO的 socketio
实例)。)
据我所知,对于Socket.IO服务器来说,没有与Flask-SSLify相当的东西,所以你需要自己构建一个WSGI中间件,或者在Python服务器上方的反向代理中实现HTTP到HTTPS的重定向,比如nginx或Apache。