2011-11-11 11 views
6

De PHP.net:PHP - ¿Alguien puede explicarme la función pfsockopen? (Socket constante)

http://www.php.net/manual/en/function.pfsockopen.php

entiendo la esencia de lo que lleva a cabo esta función, pero estoy todavía no está claro en cuanto a si esto va a lograr lo que me gustaría que lo haga. Aquí está mi situación:

Tengo una gran aplicación PHP que muchos usuarios utilizan simultáneamente. Dentro de la aplicación, estoy abriendo un socket TCP a un servidor remoto para registrar mensajes, etc. Tenía la esperanza de poder aprovechar pfsockopen para poder abrir muchas conexiones menos. Por ejemplo, el usuario 1 inicia sesión - el socket se abre. El usuario2 inicia sesión, no se abre ningún socket porque puede "cargarse" en el socket abierto por el usuario1.

¿Esto es posible?

Respuesta

9

pfsockopen de hecho mantendrá el socket abierto cuando el script finalice, permitiendo que se reutilice de una solicitud a otra, efectivamente abriendo menos conexiones como era de esperar. Sin embargo, esto no es compatible con todas las SAPI.

La persistencia se produce por proceso. Como tal, pfsockopen se ejecutó en un CLI SAPI cerrará y volverá a abrir un socket en cada ejecución, porque el script CLI se ejecuta en un único proceso que se inicia, abre un socket y finaliza (cerrando el socket junto con el proceso).

En modo CGI con un proceso por script, esto también es cierto.

Con el Apache SAPI, depende de qué tipo de módulo de procesamiento múltiple (MPM) esté en uso. mpm-prefork genera un nuevo proceso en cada solicitud, por lo que es muy probable que no lo admita. mpm-worker sin embargo, engendra hilos, por lo que probablemente funcione allí. mpm-winnt es una variante de Windows de un MPM multiproceso, por lo que debería funcionar también.

Lo peor que puede pasar es que la llamada se ejecute como una llamada normal fsockopen.

+2

pfsockopen funciona con Prefork MPM; sin embargo, cada proceso secundario tendrá su propio socket persistente. –

Cuestiones relacionadas