Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie PHP-Warteschlangen

So implementieren Sie PHP-Warteschlangen

藏色散人
藏色散人Original
2021-06-08 09:12:462735Durchsuche

So implementiert PHP die Warteschlange: Passen Sie zuerst die Sitzungszugriffsmethode an, speichern Sie dann die Sitzungs-ID in einem Ordner und führen Sie schließlich datenbankbezogene Vorgänge aus.

So implementieren Sie PHP-Warteschlangen

Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer

Wie implementiert man PHP-Warteschlangen?

Beispiel für die Verwendung eines Benutzerwarteschlangenmechanismus durch PHP, um das Problem großer Website-Besuche zu lösen.

Wenn einige Websites einige Abfragedienste bereitstellen, können mehrere Benutzer gleichzeitig auf die Daten zugreifen wegen der vielen Besuche überfordert sein und zusammenbrechen. Der folgende Code löst hauptsächlich das Problem, dass nur die Top Ten in der Warteschlange gleichzeitig verwandte Vorgänge eingeben können, während andere Benutzer vor dem Zugriff nur warten können, bis die vorherigen Personen ihre Vorgänge abgeschlossen haben.

<?php
function mysession_open($save_path,$sesssion_name){
global $sesssion_save_path;   //定义session的存储位置
$sesssion_save_path = "你要存储的session地址";
return true;
}
function mysession_close(){
return true;
}
function mysession_read($key) {
global $sesssion_save_path;
global $online;  //全局变量,用于存取队列前面的人数
$online = 0;  //初始化
$dir = opendir($sesssion_save_path); //读取文件夹,获取文件夹数
while ($file = readdir($dir)) {
if($file == ".." || $file ==".") {
continue;
}
if(file_exists($sesssion_save_path.$key){  //如果当前session文件夹已经创建
$mytime = fileatime($sesssion_save_path.$key);
if(fileatime($sesssion_save_path.$file) < $mytime){ //计算队列前面人数的数目
$online++;
}
}
else{ //如果当前session文件没有创建
$online++;//计算队列中的人数
}
}
if(!file_exists($sesssion_save_path.$key)){ //如果文件不存在将当前数加1
$online++;
}
return true;
}
function mysession_write($key,$data){
global $sesssion_save_path;
$fileame = $sesssion_save_path.$key;
if(!file_exists($fileame)) {
$fp = fopen($fileame, "w");//文件不存在则创建
fputs($fp,"");
fclose($fp);
}
}
function mysession_destory($key) {
global $sesssion_save_path;
$fileame = $sesssion_save_path.$key;
if(file_exists($fileame)){
unlink($fileame);
}
return true;
}
function mysession_gc($expiry_time) {  //删除所有过期文件
global $sesssion_save_path;
$dir = opendir($sesssion_save_path);
while ($file = readdir($dir)) {
# code...
if($file == ".." || $file == "."){
continue;
}
if(fileatime($sesssion_save_path.$file) <= time() - $expiry_time){
unlink($sesssion_save_path.$file);
}
}
return true;
}
//设置用户自定义Session存储
session_set_save_handler(&#39;mysession_open&#39;, &#39;mysession_close&#39;, &#39;mysession_read&#39;, &#39;mysession_write&#39;, &#39;mysession_destory&#39;, &#39;mysession_gc&#39;);
//判断队列前面的人数并进行查询
session_start();
global $online;
echo $online;
if($online <= 10){   //如果队列在前十名,则进行操作
//进行数据库查询,
//......
//......
//......
//......
session_destroy();
}
?>

Der obige Code speichert die SessionID in einem Ordner in Form eines Dateinamens, indem er die Sitzungszugriffsmethode anpasst. Bei jedem Öffnen einer Seite wird der Standort des aktuellen Benutzers durch die Anzahl der Dateien im aktuellen Ordner bestimmt. Wenn sich der Speicherort in den Top Ten befindet, führen Sie datenbankbezogene Vorgänge aus und löschen Sie die Sitzungsdatei. Dies kann die Stabilität der Datenbank bei großem Zugriff gewährleisten.

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo implementieren Sie PHP-Warteschlangen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn