Как реализовать длинный опрос путем записи в файл в Python с использованием Flask -RESTful с несколькими клиентами? - PullRequest
0 голосов
/ 21 февраля 2020

Я нахожусь в процессе разработки веб-приложения в Python с использованием Flask framework.

При реализации конкретной задачи мне пришлось использовать концепцию длительного опроса. После некоторых поисков я обнаружил, что ссылка (простой пример длинного опроса) полезна в моем случае. Это простой пример веб-опроса, основанный на Flask и Flask -restful на стороне сервера и jQuery на стороне клиента. Код в этом примере опрашивает, чтобы проверить, было ли выполнено обновление / изменение файла .txt (data.txt), если это так, он отображается на веб-странице.

Я написал небольшой фрагмент кода (как показано ниже), который обновляет файл data.txt, и заметил, что содержимое действительно показывалось на веб-странице при изменении файла .

#!/usr/bin/env python3
import time

def delete_content(fName):
    with open(fName, "w"):
        pass

def write_to_file(status):
    with open("/Flask_app/data.txt", "a") as f:
        f.write(status + '\n')
        print(status)

delete_content('/Flask_app/data.txt')
for i in range(5):
    write_to_file('printing ' + str(i))
    time.sleep(1)

Проблема - если вышеупомянутый код выполняется несколькими клиентами, в зависимости от времени запуска клиентов вывод на веб-странице выглядит следующим образом смешанный, т.е. отображается содержимое, записанное в файл несколькими клиентами.

Например, если файл изменяют два клиента, вывод на веб-странице будет выглядеть примерно так:

1 2 3 1 2 4 3 4 ... вместо

1 2 3 4 для Client 1 и

1 2 3 4 для Client 2 отдельно.

Как изменить код так, чтобы каждый клиент видел на веб-странице только свое собственное содержимое (записанное в файл данных)?

Извините за наличие внешней ссылки на опишите проблему. Я намеренно сделал это, чтобы пост был коротким. Любая помощь в этом отношении будет высоко оценена.

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2020

Код, который вы нашли, является простым примером, который был написан для изучения, он просто показывает, как контент может обновляться на стороне клиента, когда он был изменен на стороне сервера, обратите внимание, что это просто так.

Теперь у вас есть несколько вещей , изменяющих данные, и они отображаются на клиентах по мере их изменения (фрагмент кода, который вы показали, будет выполняться на стороне сервера, а не на стороне клиента).

Если вы хотите, чтобы клиенты изменяли содержимое, это другая проблема. Вам нужно будет выполнить другой запрос. С другой стороны, если у каждого клиента должна быть своя собственная копия данных, вам также необходимо помнить об этом, чтобы идентифицировать ее и сделать копию для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...