socket que open extension example php sockets stream

open - sockets php que es



Php Sockets vs Streams (2)

Creo que los sockets de php y las secuencias de php se superponen entre sí.
Me las arreglé para hacer un cliente de chat CLI PHP y un servidor, usando sockets o flujos.

Aquí algunas líneas de código que ilustran:
Usando sockets:

... $main_socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Cannot create socket./n"); @socket_bind($main_socket, $host, $port) or die("Could not bind to socket $host : $port./n"); @socket_listen($main_socket, 5) or die("Could not set up socket listener/n"); ...

Utilizando streams:

... $main_socket = @stream_socket_server ("tcp://$host:$port", $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN) or die("Cannot create socket./n"); $clients = array($main_socket); $clients_peername = array(array(''port'' => $port)); fputs(STDOUT, "Waiting for connections.../n"); ...

El punto aquí es que un cliente y un servidor podrían hacerse usando cualquiera de las funciones de sockets, o bien las funciones de flujo.

Sé que Streams es parte del núcleo de PHP y Sockets es una extensión.

Mi pregunta (s) es (son):

  • ¿Cuál es la diferencia entre sockets y flujos cuando se refiere a la programación de sockets?
  • ¿Hay alguna capacidad, relacionada con la programación de sockets, que una pueda tener y la otra no?

Como señalaste, ''streams'' están en el núcleo de PHP (integrado, siempre disponible), mientras que ''sockets'' son parte de una extensión que rara vez se incluye. Aparte de eso, son casi idénticos. Puede usar tanto TCP como UDP con flujos tanto en modo de bloqueo como de bloqueo, que cubre el 99% de todos los casos de uso.

La única excepción común que se me ocurre es ICMP. Por ejemplo, ''ping''. Sin embargo, parece que actualmente no hay una forma segura de hacer ICMP desde PHP. Dichas llamadas requieren SOCK_RAW a través de la extensión de socket, que requiere privilegios ''root'' para ejecutar. Además, no todos los enrutadores enrutarán otros tipos de paquetes fuera de TCP, UDP e ICMP. Esto limita la utilidad de la extensión de socket.


De acuerdo con el manual, la extensión de los enchufes es de nivel más bajo. Por ejemplo, con sockets tienes un control más preciso al crear uno, y puedes elegir SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, etc.

La extensión de socket implementa una interfaz de bajo nivel para las funciones de comunicación de socket basadas en los populares sockets BSD, brindando la posibilidad de actuar como un servidor de socket así como un cliente.

Para una interfaz de socket del lado del cliente más genérica, vea stream_socket_client (), stream_socket_server (), fsockopen () y pfsockopen ().

fuente: http://www.php.net/manual/en/intro.sockets.php