Maison  >  Article  >  développement back-end  >  Étude de cas d'implémentation d'une classe multi-thread PHP

Étude de cas d'implémentation d'une classe multi-thread PHP

黄舟
黄舟original
2017-11-11 14:16:512397parcourir

Nous vous avons déjà présenté la méthode d'implémentation du multi-threading PHP et des appels asynchrones. Nous savons tous que le multi-threading implémenté via le serveur WEB ne peut qu'imiter certains effets du multi-threading, et n'est pas du multi-threading. dans le vrai sens du terme, mais peu importe, cela peut encore répondre à certains de nos besoins, nous allons donc aujourd'hui implémenter la classe multithread PHP !

Classe multi-threading php :

/** 
* @title: PHP多线程类(Thread) 
* @version: 1.0 
* 
* PHP多线程应用示例: 
* require_once 'thread.class.php'; 
* $thread = new thread(); 
* $thread->addthread('action_log','a'); 
* $thread->addthread('action_log','b'); 
* $thread->addthread('action_log','c'); 
* $thread->runthread(); 
* 
* function action_log($info) { 
* $log = 'log/' . microtime() . '.log'; 
* $txt = $info . "rnrn" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn"; 
* $fp = fopen($log, 'w'); 
* fwrite($fp, $txt); 
* fclose($fp); 
* } 
*/ 
class thread { 
var $hooks = array(); 
var $args = array(); 
function thread() { 
} 
function addthread($func) 
{ 
$args = array_slice(func_get_args(), 1); 
$this->hooks[] = $func; 
$this->args[] = $args; 
return true; 
} 
function runthread() 
{ 
if(isset($_GET['flag'])) 
{ 
$flag = intval($_GET['flag']); 
} 
if($flag || $flag === 0) 
{ 
call_user_func_array($this->hooks[$flag], $this->args[$flag]); 
} 
else 
{ 
for($i = 0, $size = count($this->hooks); $i < $size; $i++) 
{ 
$fp=fsockopen($_SERVER[&#39;HTTP_HOST&#39;],$_SERVER[&#39;SERVER_PORT&#39;]); 
if($fp) 
{ 
$out = "GET {$_SERVER[&#39;PHP_SELF&#39;]}?flag=$i HTTP/1.1rn"; 
$out .= "Host: {$_SERVER[&#39;HTTP_HOST&#39;]}rn"; 
$out .= "Connection: Closernrn"; 
fputs($fp,$out); 
fclose($fp); 
} 
} 
} 
} 
}

Méthode d'utilisation, le code est le suivant :

$thread = new thread(); 
$thread->addthread(&#39;func1&#39;,&#39;info1&#39;); 
$thread->addthread(&#39;func2&#39;,&#39;info2&#39;); 
$thread->addthread(&#39;func3&#39;,&#39;info3&#39;); 
$thread->runthread();

Instructions :

addthread () consiste à ajouter une fonction de thread. Le premier paramètre est le nom de la fonction, et les paramètres suivants (facultatifs) sont les paramètres transmis à la fonction spécifiée.

runthread () est la fonction du thread d'exécution .

Résumé :

Cet article partage une classe PHP multithread avec vous, donc vous vous n'aurez pas besoin d'écrire autant de code à l'avenir. Vous pourrez l'appeler directement la prochaine fois que vous en aurez besoin.

Recommandations associées :

Comment implémenter le multi-threading asynchrone en PHP


Introduction à trois méthodes d'implémentation de simulation multi-thread php


Un exemple d'implémentation multi-thread php


Une méthode d'implémentation du multi-threading PHP—shell

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn