Я создаю приложение, которое использует комбинацию Tornado Web Server и Symfony.
Часть торнадо использует сокеты и запрашивает базу данных каждые 1000 мс и проверяет, не отличается ли она от того, что в данный момент хранится в кэше (вроде как redis или memcache).
Если в паре ключ-значение есть что-то другое, то он запускает запрос javascript, чтобы доставить новую информацию в приложение symfony, и запускает диалоговое окно jquery ui, говорящее «Привет, твоя очередь», а затем ждет ввода от пользователя, чтобы изменить mysql. базы данных, а затем он снова запускает весь процесс и отправляет сообщение «Somethings Changed» другому пользователю.
Проблема, с которой я сталкиваюсь, заключается в том, что иногда диалоговое окно не запускается, поскольку оно получает сообщение «Somethings Changed», которое является пустым.
Я думаю, что происходит потому, что Symfony и Tornado манипулируют базой данных, и сообщение «Somethings Changed» запускается до того, как диалоговое окно появляется в приложении Symfony.
Я пытаюсь найти способ узнать, был ли открыт определенный диалог jquery во время обновления, и если он не был открыт, отправьте сообщение для обновления снова.
Одна из идей состоит в том, чтобы обновить базу данных в Tornado со случайным числом, а затем, когда откроется диалоговое окно, установить этот cookie на это случайное число. Если cookie соответствует записи в базе данных, это означает, что был замечен соответствующий диалог. Если он не совпадает, снова запустите принудительное обновление.
Я здесь далеко от базы? Эта теория даже близка к тому, как это сделать?
Это последняя часть моего приложения, и она работает от 8 до 9 раз из 10
ЛЮБЫЕ идеи или предложения будут с благодарностью
Задача ещё не решена.
Других решений пока нет …