Position actuelle: Accueil> Derniers articles> Comment traiter efficacement et recevoir des flux de mégadonnées après PFSocCkopen?

Comment traiter efficacement et recevoir des flux de mégadonnées après PFSocCkopen?

gitbox 2025-08-10
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie du code n&#39;a rien à voir avec le contenu de l&#39;article,Pour la démonstration seulement</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Initialisation de la connexion...\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

---

</span><span><span class="hljs-comment"># pfsockopen Comment traiter efficacement et recevoir des flux de mégadonnées après la connexion?</span></span><span>

existerPHPmilieu,`pfsockopen` est une fonction pour établir des connexions persistantes,Convient aux scénarios de gestion qui nécessitent une connexion à long terme。尤其exister处理大数据流时,Utilisation raisonnable `pfsockopen` Peut considérablement améliorer les performances et la stabilité du programme。Cet article sera établi à partir de la connexion、Lecture de données、Contrôle du tampon et gestion des exceptions,Discuter de la façon de traiter efficacement et de recevoir des flux de Big Data。

</span><span><span class="hljs-comment">## 1. utiliser pfsockopen Établir une connexion persistante</span></span><span>

L&#39;avantage d&#39;une connexion persistante est que la connexion est établie une fois,Demander des connexions multiplexées,réduireTCPPréparette au-dessus de la tête。La méthode d&#39;appel est la suivante:

```php
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pfsockopen</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-variable">$timeout</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)\n");
}
</span><span><span class="hljs-comment">// Définir le mode non bloquant,Améliorer la vitesse de réponse</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_set_blocking</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span></span>

Ceci est particulièrement souligné ici, car le mode de blocage peut entraîner la suspension du programme lors de la lecture du flux de Big Data, affectant d'autres tâches.

2. Utilisez la lecture du bloc pour éviter le débordement de la mémoire

Lorsque vous recevez des mégadonnées, la lecture de toutes les données peut facilement conduire à une explosion de la mémoire. L'approche raisonnable consiste à lire en morceaux:

 <span><span><span class="hljs-variable">$bufferSize</span></span><span> = </span><span><span class="hljs-number">8192</span></span><span>; </span><span><span class="hljs-comment">// 8KBTampon</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
    </span><span><span class="hljs-variable">$chunk</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$bufferSize</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$chunk</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-comment">// Lire la gestion des erreurs</span></span><span>
        </span><span><span class="hljs-keyword">break</span></span><span>;
    }
    </span><span><span class="hljs-variable">$data</span></span><span> .= </span><span><span class="hljs-variable">$chunk</span></span><span>;
    </span><span><span class="hljs-comment">// Traiter chaque bloc de données,Par exemple, écrire dans un fichier、Block by Block Analysis, etc.</span></span><span>
}
</span></span>

Cela permet le traitement lors de la lecture des données, en réduisant l'utilisation de la mémoire.

3. Optimiser les paramètres de tampon et d'expiration

La taille du tampon par défaut et le délai d'expiration peuvent ne pas convenir au streaming de données important. Un délai d'expiration approprié peut être défini via Stream_Set_timeout :

 <span><span><span class="hljs-title function_ invoke__">stream_set_timeout</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// installation10Deuxième délai</span></span><span>
</span></span>

Et équilibrez la vitesse et la consommation de mémoire en ajustant la taille du tampon (comme l'augmentation de la longueur de lecture de Fread ).

4. Utiliser des filtres à débit et une compression de données

Si le flux de données est du texte ou des données structurées, envisagez d'utiliser un filtre de flux pour le décodage ou la décompression des données, enregistrant le temps de transmission et la bande passante. Par exemple:

 <span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-string">"zlib.inflate"</span></span><span>, STREAM_FILTER_READ);
</span></span>

Cela vous permet de lire directement les données décompressées.

5. Fermez la connexion et le recyclage des ressources

Après utilisation, fermez la connexion correctement pour éviter la fuite des ressources:

 <span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span></span>

En particulier dans les scénarios de connexion persistants, il est nécessaire d'assurer la libération en temps opportun des ressources pour empêcher le pool de connexions trop rempli.

Résumer

Lorsque vous utilisez PFSOCCKOpen pour traiter les flux de mégadonnées, les points clés sont:

  • Utiliser le mode non bloquant et la taille du tampon raisonnable;

  • Lisez les données en morceaux pour éviter les explosions de mémoire;

  • La combinaison d'un filtre à flux améliore l'efficacité du traitement des données;

  • Définissez un délai d'expiration raisonnable pour éviter le blocage;

  • Fermez la connexion à temps après la fin.

Grâce à la méthode ci-dessus, le programme PHP peut traiter efficacement et de manière stable et recevoir de grands flux de données.

 <span></span>