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;
}
Avez-vous essayé https://github.com/AngularClass/angular-websocket toujours bon d'avoir une bonne mise en œuvre du angularWay – aorfevre