私は、サーバー送信イベントを使用して、ユーザー用のメッセージを印刷しています。サーバーサイドイベントを使用して[phpfastcache経由でキャッシュアイテムが見つかりません]
$_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);
}
:キャッシュにメッセージを保存するイベントがあり、不規則な間隔で
$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);
}
}
}
、:無限ループで
、私は放送するキャッシュ内の新しい項目があるかどうかを確認、10秒ごと問題は、キャッシュ内の新しい項目に対して無限ループをチェックインしている間に、空の配列を取得することです。ページをリロードするか、ブラウザがサーバーサイドイベントストリームに再接続すると、アイテムがキャッシュに表示されます。 flush
メソッドがありますか? キャッシュメソッドとしてfiles
を使用しています。
\phpFastCache\CacheManager::setDefaultConfig(array(
"path" => DIR_TMP
));
global $cache;
$cache = \phpFastCache\CacheManager::getInstance('files');