Php Sockets vs Flux
Je pense que php sockets et les flux de php sont imbriqués les uns dans les autres.
J'ai réussi à faire une CLI de PHP chat client et un serveur, à l'aide de sockets ou les ruisseaux.
Ici quelques illustrant les lignes de code:
À l'aide de 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");
...
À l'aide de flux:
...
$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");
...
Le point ici est qu'un client et un serveur peut être faite
soit en utilisant les sockets fonctions, soit les ruisseaux fonctions.
Je sais que les cours d'eau fait partie du coeur de PHP et de Sockets est une extension.
Ma question(s) est(sont):
- Quelle est la différence entre les prises de courant et de flux, en se référant à des sockets de programmation?
- Existe-il des capacités, liées à la programmation sockets, que l'on peut avoir, tandis que l'autre ne le peuvent pas?
- Merci pour l'édition et désolé pour mon anglais.
- Pas de problème. Votre anglais est presque parfait, donc il n'y a rien à s'inquiéter 🙂
Vous devez vous connecter pour publier un commentaire.
Selon le manuel, les prises d'extension est à un niveau plus bas. Par exemple, avec les sockets, vous avez un contrôle plus précis lors de la création de l'un, et vous pouvez choisir SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET, etc.
source: http://www.php.net/manual/en/intro.sockets.php
Comme vous l'avez souligné, 'flux' sont dans le coeur de PHP (built-in, toujours disponible) tandis que les "sockets" sont partie d'un rarement de l'extension. Autre que cela, ils sont presque identiques. Vous pouvez utiliser TCP et UDP avec les cours d'eau avec les deux ainsi que le blocage et les non-blocage de modes, qui couvre 99% de tous les cas d'utilisation.
La commune seule exception est, je pense, ICMP. Par exemple, "ping". Cependant, il semble qu'il y ait actuellement n'est pas un moyen sûr de faire ICMP à partir de PHP. De tels appels nécessitent SOCK_RAW via la prise d'extension, ce qui nécessite les privilèges 'root' à exécuter. Aussi, pas tous les routeurs de l'itinéraire d'autres types de paquets en dehors de TCP, UDP et ICMP. Cela limite l'utilité de l'extension socket.