Я создал одностраничное приложение, используя ReactJS (front-end), Flask (back-end) и Flask-SocketIO для получения данных из MongoDB (используя PyMongo).
Пользовательский интерфейс содержит несколько кнопок фильтра и панель поиска. Основываясь на этих фильтрах, я инициировал события сокета флешки из внешнего интерфейса, который извлекает данные из MongoDB. Работает отлично.
Мне нужно получить данные в реальном времени из MongoDB, чтобы показать в пользовательском интерфейсе. Я использовал db.collection.watch () изменение функциональности потока MongoDB. Для этого я преобразовал свой автономный MongoDB в набор реплик.
Теперь изменения из MongoDB отлично отражаются в моем приложении Flask.
from flask import Flask
from flask_socketio import SocketIO,send
from flask_pymongo import PyMongo
from datetime import datetime,timedelta
import time
import config
app = Flask(__name__)
app.config['SECRET_KEY'] = config.APP_CONFIG['SECRET_KEY']
app.config['MONGO_DBNAME'] = config.MONGO_CONFIG['MONGO_DBNAME']
app.config['MONGO_URI'] = config.MONGO_CONFIG['MONGO_URI']
socketio = SocketIO(app)
mongo = PyMongo(app)
changeStream = mongo.db.collection.watch()
@socketio.on('connect')
def handleConnection():
print('connection established')
with mongo.db.collection.watch() as stream:
for change in stream:
print(change)
@socketio.on('custom_event')
def custom event():
for row in mongo.db.collection.find():
print(s['field'])
В приведенном выше коде, если какая-либо вставка данных происходит в коллекции MongoDB, она напечатает изменения. Если я применяю некоторые фильтры через пользовательский интерфейс, событие сокета (custom_event) не запускается, сокет всегда занят просмотром новых изменений в коллекции. Как это решить?