В настоящее время я использую Flask-uWSGI-Websockets для предоставить функциональность веб-сокета для моего приложения. Я использую Flask-SQLAlchemy для подключения к моей базе данных MySQL.
Flask-uWSGI-Websockets использует gevent для управления подключениями к веб-сокетам.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что после завершения соединения с веб-сокетом соединение с базой данных, установленное Flask-SQLAlchemy, будет продолжать жить.
Я пробовал вызывать db.session.close()
и db.engine.dispose()
после каждого подключения к веб-сокету, но это не имело никакого эффекта.
Вызов gevent.monkey.patch_all()
в начале моего приложения не имеет значения.
Вот простое представление о том, что я делаю:
from gevent.monkey import patch_all
patch_all()
from flask import Flask
from flask_uwsgi_websocket import GeventWebSocket
from flask_sqlalchemy import SQLAlchemy
app = Flask()
ws = GeventWebSocket()
db = SQLAlchemy()
db.init_app(app)
ws.init_app(app)
@ws.route('/ws')
def websocket(client):
""" handle messages """
while client.connected is True:
msg = client.recv()
# do some db stuff with the message
# The following part is executed when the connection is broken,
# i tried this for removing the connection, but the actual
# connection will stay open (i can see this on the mysql server).
db.session.close()
db.engine.dispose()
finally
. - person architectonic   schedule 17.09.2015