Je me demande, quel est le moyen le plus rapide d'envoyer des données d'un processus à l'autre en PHP? Les données sont seulement une chaîne courte. Actuellement, j'ai une solution avec des sockets AF_UNIX développés, mais les tests montrent qu'il faut 0,100 ms pour transmettre les données d'un processus à un autre. Je me demande, si la mémoire partagée peut être plus rapide? Cependant, je n'ai aucune idée, comment faire l'autre processus vérifie régulièrement la mémoire partagée pour détecter, s'il y a de nouvelles données écrites?Le plus rapide IPC en PHP
solution actuelle:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
Et client:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Cette solution fonctionne complètement, très bien, mais les résultats sont comme ceci:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Toutes les idées, comment rendre ce script plus rapide ou développer une solution plus rapide (éventuellement à mémoire partagée)?
Merci à l'avance, Jonas
Etes-vous sûr que c'est votre goulot d'étranglement? C'est difficile à dire à partir de votre benchmark, mais il semble que vous le fassiez bien en dessous d'une milliseconde entre le client et le serveur. Peut-être pourriez-vous clarifier votre point de repère dans votre question. –
Y a-t-il une raison évidente pour laquelle vous ne pouvez pas utiliser les threads posix, ou vous devez utiliser des processus séparés. – SingleNegationElimination
Je pense que threds pourrait fonctionner, comme les processus pourraient être joints, cependant, n'ont aucune idée, comment le faire :) – flyeris