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');