2017-09-06 1 views
0

J'utilise Server-Sent Events pour imprimer des messages pour l'utilisateur.Éléments de cache manquants [via phpfastcache] utilisant les événements côté serveur

En boucle infinie, toutes les 10 secondes je vérifie s'il y a un nouvel élément dans le cache à diffuser:

$messages_to_broadcast = $this->_cache->getItemsByTag('inbox_message'); 
foreach ($messages_to_broadcast as $key => $_message) { 
    $_message = $_message->get(); 
    if($_message->recipient == $this->_user_id || $_message->recipient == 0){ 
     if(!is_null($html = \CRM\Engine\MessagingService::getMessageToBroadcast($_message))) 
     { 
      echo "event: $_message->type \n"; 
      echo "data:{\n"; 
      echo "data:\"message_html\": \"$html\" \n"; 
      echo "data:}\n\n"; 
      $this->send_keepalive = false; 
      $this->_cache->deleteItem($key); 
     } 
    } 
} 

à intervalles irréguliers, il y a événement, enregistrer un message à cache:

$_cache_this = self::$_cache->getItem("message_".$_message->id); 
if(!$_cache_this->isHit()){ 
    $_cache_this->set($_message) 
     ->expiresAfter(600) 
     ->addTag('inbox_message'); 
    self::$_cache->save($_cache_this); 
} 

Le problème est que pendant que je vérifie en boucle infinie pour de nouveaux éléments dans le cache, j'obtiens tableau vide. Lorsque je recharge la page ou que le navigateur se reconnecte au flux des événements côté serveur, l'élément apparaît dans le cache. Y a-t-il une méthode flush qui me manque ici? J'utilise files comme méthode de cache.

\phpFastCache\CacheManager::setDefaultConfig(array(
    "path" => DIR_TMP 
)); 
global $cache; 
$cache = \phpFastCache\CacheManager::getInstance('files'); 

Répondre

0

Il est un certain temps que vous avez demandé, mais généralement vous ne pouvez saisir les éléments dans le cache par tag, ont pas vu une méthode qui vous permet de obtenir toutes les entrées du cache.

$entries = $cache->getItemsByTag('inbox_message')

$entries tiendra maintenant tous vos articles. Regardez ici: https://github.com/PHPSocialNetwork/phpfastcache/blob/final/docs/examples/tagsMethods.php où vous pouvez voir un exemple complet sur l'utilisation.