Dans PHP, nous pouvons créer des programmes de services réseau via des extensions de socket. Parmi eux, la fonction socket_accept () est l'une des fonctions clés lors de la création d'applications de serveur basées sur TCP. Cet article utilisera un exemple complet pour décrire comment implémenter un simple serveur Echo (serveur Echo) à l'aide de socket_accept () .
socket_accept () est utilisé pour accepter une demande de connexion au client. Cette fonction bloque sur la prise de serveur jusqu'à ce qu'une connexion entre. Lorsqu'il réussit, il renvoie une nouvelle ressource de socket qui peut être utilisée pour communiquer avec le client.
grammaire:
resource socket_accept ( resource $socket )
$ Socket est un socket serveur créé et écouté via socket_create () et socket_bind () .
Renvoie une ressource de socket qui communique avec le client.
Voici les étapes complètes pour créer un simple serveur d'écho:
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("socket_create() échouer: " . socket_strerror(socket_last_error()) . "\n");
}
$host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
die("socket_bind() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}
if (!socket_listen($server, 5)) {
die("socket_listen() échouer: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "Le serveur est démarré,Écouter le port $port ...\n";
while (true) {
$client = socket_accept($server);
if ($client === false) {
echo "socket_accept() échouer: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
$msg = "Bienvenue pour se connecter au serveur Echo!Veuillez saisir le contenu,Le serveur reviendra tel quel。\n";
socket_write($client, $msg, strlen($msg));
while (true) {
$input = socket_read($client, 2048, PHP_NORMAL_READ);
if ($input === false || trim($input) === 'exit') {
break;
}
$input = trim($input);
$output = "Vous êtes entré: $input\n";
socket_write($client, $output, strlen($output));
}
socket_close($client);
echo "Connexion du client fermé。\n";
}
Lorsque vous devez arrêter le serveur, vous pouvez fermer la prise principale:
socket_close($server);
Vous pouvez utiliser Telnet ou n'importe quel outil client qui prend en charge la connexion TCP pour se connecter au serveur:
telnet m66.net 12345
Une fois la connexion réussie, le serveur répondra au message de bienvenue et renverra tout ce que vous entrez en tel quel.
L'extension de socket de PHP n'est pas activée par défaut et doit être activée dans php.ini .
Cet exemple est le mode de blocage et convient à des fins de démonstration et d'enseignement. Dans les environnements de production réels, il est recommandé d'utiliser le mode non bloquant ou d'utiliser des méthodes telles que Stream_Select () pour obtenir un support multi-client.
Assurez-vous que le pare-feu et le système d'exploitation permettent aux ports d'écoute de communiquer.
Via socket_accept () , PHP peut créer une application de réseau TCP de base. Le serveur Echo implémenté dans cet article est un bon point de départ pour comprendre le mécanisme de programmation de socket. Vous pouvez davantage vous développer en fonction de cela pour implémenter des services de réseau plus complexes, tels que les salles de chat, la télécommande, etc.
L'exemple Echo Server est l'un des modèles les plus élémentaires de la programmation de socket, mais il ouvre la porte à la programmation réseau pour vous. En maîtrisant ces fondations, le potentiel de PHP dans la communication réseau sera infiniment élargi.