Я пытаюсь создать узел-сервер, который будет уведомлять клиентов с большим количеством запросов, когда файл обновляется на сервере. Тем не менее, я не могу придумать код, чтобы сервер распознал изменение в файле и обновил любой клиент опроса, который было выполнено.обработка многопользовательского большого опроса с помощью узла
Мой источник путаницы уходит корнями в обработку отметки времени, в частности, какие временные метки я должен отслеживать. Клиенты просто хотят узнать, изменился ли файл. Я не думаю, что нам нужно будет заботиться о том, когда приходит запрос, т. Е. Нам не нужно сохранять метку времени запроса, чтобы определить изменение файла. Но нам нужно отслеживать, чтобы определить, когда истек срок действия запроса.
Итак, я думаю, что сервер получает запрос и сразу же сохраняет временную метку целевого файла. Затем каждые 10 секунд сервер проверяет сохраненную метку времени на отметку времени файла в текущее время. Если есть разница, файл был обновлен, и сервер отправляет ответ клиенту, который указывает, что файл был изменен. Если сервер не видит изменения в файле после, скажем, 60 секунд, он отправляет ответ клиенту, чтобы указать, что клиент должен инициировать новый запрос.
Имеет ли смысл стратегия выше? Как эффективно обрабатывать материал временной метки? И как вы обрабатываете несколько клиентов одновременно? И как предотвращается переполнение сервера несколькими запросами одного и того же клиента?
Подход eventEmitter действительно работает хорошо! На клиенте я начал использовать sessionStorage для записи временной метки, возвращенной с сервера (может быть, это не лучший способ?). Когда сервер отправляет новую временную метку в JSON, клиент хранит ее в sessionStorage, а затем оборачивается и делает запрос с этим значением в качестве аргумента «после». Я пробовал его, по крайней мере, с двумя клиентами до сих пор, и, похоже, он отлично работает! Следующим шагом будет просмотр нескольких файлов; очень интересно узнать, как вы можете подходить к этой проблеме? – mlehmeher
Я все равно останусь одним наблюдателем. Просто укажите путь к файлу в событии как параметр. И если есть ограниченное количество разных файлов, которые вы знаете заранее, я бы поставил в очередь эти fs.watchFiles при запуске сервера. Однако, если у вас много разных файлов, клиенты могут смотреть в случайном порядке, я бы обернул все это аккуратным классом, который отслеживает «открытых» наблюдателей и отключает файлы, когда их никто не интересует. –
Итак, этот проект получился довольно приятным благодаря вашему первоначальному вводу. Теперь мой сервер обрабатывает многопользовательские клиенты, которые могут просматривать несколько файлов. Клиент запрашивает файл для просмотра. Очередь поддерживается, которая отслеживает назначенные сервером идентификаторы GUID для каждого запроса клиента. Все это завершено в класс отличный класс по вашему предложению. Все события в классе наблюдателя используют EventEmitter, поэтому нет никакого уродливого разворота обратного вызова. Спасибо за помощь! – mlehmeher