在我的正常轮询Laravel聊天应用程序中,我会将用户发送的新消息保存到文件缓存中,其中密钥为字符串,从date(current_time)
函数和消息体中获取其值。
然后,当我想获得这些消息时,我将使用最后一个Poll值$lastPolled = Session::get('lastPolled')
并与缓存中的键进行比较。大于$ lastpolling值的键将把它们的数据作为新消息并附加到对话中。
最后,我将更新上一次轮询的会话值Session::put('lastPolled',date(Y-m-d H:i:s)
那么,我如何比较$ lastpolling与缓存中的所有键并获得每个键的值?类似以下语句:
$latestMessages = array();
foreach(KeysInCache as Key=>value){
if($lastPolled>Key)
array_push($latestMessages,Key=>value);
}
谢谢!
注。更好的建议可以加分。哦,由于技术原因,我不能使用memcache/redis/othersupercache,只能使用文件/数据库缓存。(
为什么不试试基于时间戳或密钥创建缓存文件呢?
进一步的细节和建议在:http://evertpot.com/107/
//这是你用function存储信息的函数存储(关键数据,美元ttl美元){
// Opening the file $h = fopen($this->getFileName($key),'w'); if (!$h) throw new Exception('Could not write to cache'); // Serializing along with the TTL $data = serialize(array(time()+$ttl,$data)); if (fwrite($h,$data)===false) { throw new Exception('Could not write to cache'); } fclose($h);
}
//查找某个私钥文件名的通用函数getFileName($key) {
return '/tmp/s_cache' . md5($key);
}
//获取数据的函数如果失败返回falsefetch(键)美元{
$filename = $this->getFileName($key); if (!file_exists($filename) || !is_readable($filename)) return false; $data = file_get_contents($filename); $data = @unserialize($data); if (!$data) { // Unlinking the file when unserializing failed unlink($filename); return false; } // checking if the data was expired if (time() > $data[0]) { // Unlinking unlink($filename); return false; } return $data[1]; }
}