2015-11-04 7 views
0

Приложение Я работаю над обновлением данных о пожарах каждую секунду, и то, что я делал до сих пор, работает очень хорошо, но теперь я столкнулся с проблемой.Синхронизация обновлений в реальном времени при получении данных от API

В основном я начинаю слушать SSE (события, отправленные сервером), как только я закончил, чтобы получить все данные из API, и это приведет к синхронизации синхронизации между данными, которые я только что получил, и полученными обновлениями, пока get запущен.

Продолжительность вызова ajax в начале составляет около 20, 30 секунд, и за это время мне не хватает обновлений для нескольких элементов.

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

Я использую Угловой для всего приложения и код выглядит очень похож на это в самом начале:

var source = new EventSource('/updates'); 
$scope.items_01 = []; 
$scope.items_02 = []; 

$q.all([ 
    getList(first, [], 0), 
    getList(second, [], 0) 
]) 
.then(function (data) { 
    $scope.items_01 = data[0]; 
    $scope.items_02 = data[1]; 
    startStreaming(); 
}); 

function startStreaming() { 
    source.addEventListener('items_01', handleItems01Callback, false); 
    source.addEventListener('items_02', handleItems02Callback, false); 
} 

Как я могу держать синхронизируются данные я получаю с обновлениями, которые я получаю при получении, любых идеями?

ответ

0

Начните слушать SSE сразу и буферизировать входящие обновления. Как только вы получите полный снимок, начните применять обновления.

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

+0

Я сделал это, как вы предлагали, и кажется, что он работает нормально. благодаря –