2017-06-14 6 views
0

J'ai un gros streaming en direct en utilisant socket.io en recevant environ 10 000 messages par minute, problème avec le code ci-dessous j'ai défini Bufferlimit 2MB donc une fois sa portée maximale j'ai le article de $scope.event. Mais aftetr alors que je vois $scope.event.length commence à augmenter et a gelé le navigateur.Comment effacer le tampon du navigateur lorsque la taille maximale atteinte des données

Comment gérer le streaming intensif et supprimer des éléments sur le poste BufferLimit?

Une meilleure approche pour résoudre ce problème?

main.html

<div class="panel-body display-logs" scroll-bottom="event" style="width:100%;"> 
       <ul style="list-style: none;"> 
        <li ng-repeat="message in event" ng-class="{lastItem: $last}"><span>{{message.value}}</span></li> 
       </ul> 
      </div> 

ctrl.js

var Bufferlimit = 1024 * 1024 * 2; 
    $scope.event = []; 
    var totalReceived = 0; 

    socket.on(searchEnv + 'Consumer', function(data) { 
     var messageSize = getBytesForBuffer(data); 
     safelyAdd({ 
      id: $scope.event.length, 
      value: data, 
      messageSize: messageSize 
     }); 
    }); 

    function safelyAdd(element) { 
     if (totalReceived > Bufferlimit && $scope.event.length) { 
      totalReceived -= $scope.event[0].messageSize; 
      $scope.event.shift(); //delete first element in $scope.event 
      console.log('totalReceivedBytes', totalReceived); 
      console.log('Length', $scope.event.length); 
     } 
     $scope.event.push(element); //then push new item.. 

    } 

    function getBytesForBuffer(str) { 
     var strBytes = str.length * 2; 
     checkLimit(strBytes); 
     return strBytes; 
    } 

function checkLimit (val){ 
     totalReceived += val; 
    } 
+1

Avez-vous essayé https://github.com/AngularClass/angular-websocket toujours bon d'avoir une bonne mise en œuvre du angularWay – aorfevre

Répondre

0

Si cela est tout le code pertinent, il semble que vous mettez à jour uniquement totalReceived quand il dépasse la limite de la mémoire tampon, mais parce que vous n'ajoutez pas la longueur des éléments reçus, il reste à zéro et votre tableau continue de croître sans limites.

Je pense que vous êtes juste manque quelque chose le long des lignes de:

else { totalReceived += element.length }