Maison développement back-end tutoriel php Connaissance de base de Socket en PHP

Connaissance de base de Socket en PHP

Jun 07, 2018 pm 03:27 PM
php socket

Cet article présente principalement les connaissances de base de Socket en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Que sont TCP/IP et UDP ?

TCP/IP (Transmission Control Protocol/Internet Protocol) est un ensemble de protocoles standards industriels conçus pour les réseaux étendus (WAN).
UDP (User Data Protocol, User Datagram Protocol) est un protocole correspondant à TCP. Il fait partie de la suite de protocoles TCP/IP.
Voici un schéma montrant la relation entre ces protocoles.

2015811151417312.jpg (596×448)

La suite de protocoles TCP/IP comprend la couche transport, la couche réseau et la couche liaison. Vous connaissez maintenant la relation entre TCP/IP et UDP.
Où est la prise ? Sur la figure 1, nous ne voyons pas l’ombre de Socket, alors où est-elle ? Utilisons des images pour parler clairement.

2015811151446490.jpg (542×476)

Il s'avère que le Socket est ici.
Qu'est-ce que Socket ? Socket est une couche d'abstraction logicielle intermédiaire pour la communication entre la couche application et la suite de protocoles TCP/IP. Il s'agit d'un ensemble d'interfaces. En mode conception, Socket est en fait un mode façade, qui cache la famille complexe de protocoles TCP/IP derrière l'interface Socket. Pour les utilisateurs, un ensemble d'interfaces simples permet à Socket d'organiser les données pour se conformer au protocole spécifié.
Pouvez-vous les utiliser ? Les générations précédentes ont fait beaucoup pour nous et la communication entre les réseaux est devenue beaucoup plus simple, mais après tout, il reste encore beaucoup de travail à faire. Quand j'ai entendu parler de la programmation Socket auparavant, je pensais qu'il s'agissait de connaissances en programmation relativement avancées, mais tant que nous comprendrons le principe de fonctionnement de la programmation Socket, le mystère sera levé.
Une scène de la vie. Si vous souhaitez appeler un ami, composez d'abord le numéro. Lorsque l'ami entend la sonnerie, il décroche le téléphone. Vous et votre ami êtes alors connectés et vous pouvez parler. Une fois la communication terminée, raccrochez pour mettre fin à la conversation. Des scènes de la vie expliquent comment cela fonctionne. Peut-être que la famille des protocoles TCP/IP est née dans la vie, mais ce n'est pas nécessairement le cas.

2015811151507191.jpg (478×491)

Présentation de la programmation Socket en PHP php5.3 est livré avec un module socket, qui permet à PHP d'avoir des capacités de communication socket. Pour des API spécifiques, veuillez. reportez-vous au manuel officiel : http ://php.net/manual/zh/function.socket-create.php, l'implémentation spécifique est très similaire à c, sauf qu'il lui manque les opérations sous-jacentes d'allocation de mémoire et de réseau conversion de l'ordre des octets

En même temps, le module pcntl de PHP et le module posix peuvent réaliser la gestion de base des processus, le traitement du signal et d'autres fonctions au niveau du système d'exploitation. Il y a ici deux fonctions très clés, pcntl_fork() et posix_setsid(). Forker () un processus signifie créer une copie du processus en cours d'exécution. La copie est considérée comme un processus enfant et le processus d'origine est considéré comme le processus parent. Une fois fork() exécuté, il peut être séparé du processus et du contrôle de terminal qui l'ont démarré, ce qui signifie également que le processus parent peut se terminer librement. Valeur de retour pcntl_fork(), -1 indique un échec d'exécution, 0 indique dans le processus enfant et supérieur à 0 indique dans le processus parent. setsit(), qui fait d'abord du nouveau processus le "leader" d'une nouvelle session, et finalement fait que le processus ne contrôle plus le terminal. C'est également l'étape la plus critique pour devenir un processus démon, ce qui signifie que le processus ne sera pas forcé de se terminer à la fermeture du terminal. Il s’agit d’une étape critique pour un processus résident qui ne peut être interrompu. Effectuez le dernier fork(). Cette étape n'est pas nécessaire, mais elle est généralement effectuée. Sa plus grande importance est d'empêcher l'obtention du terminal de contrôle

Qu'est-ce qu'un processus démon ? Un démon est généralement considéré comme une tâche en arrière-plan qui ne contrôle pas le terminal. Il présente trois caractéristiques évidentes :

  1. Fonctionne en arrière-plan

  2. Détaché du processus qui l'a déclenché

  3. Pas besoin de contrôle de terminal

La méthode d'implémentation la plus courante : fork() -> setsid() -> implémente le processus démon .

Code de surveillance des sockets côté serveur

  <?php 
   
  // 接受客户端请求,回复固定的响应内容 
  function server_listen_socket ($address, $port) 
  { 
    $buffer = "Msg from wangzhengyi server, so kubi..."; 
    $len = strlen($buffer); 
     
    // create, bind and listen to socket 
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    if (! $socket) { 
      echo "failed to create socket:" . socket_strerror($socket) . "\n"; 
      exit(); 
    } 
     
    $bind_flag = socket_bind($socket, $address, $port); 
    if (! $bind_flag) { 
      echo "failed to bind socket:" . socket_strerror($bind_flag) . "\n"; 
      exit(); 
    } 
     
    $backlog = 20; 
    $listen_flag = socket_listen($socket, $backlog); 
    if (! $listen_flag) { 
      echo "failed to listen to socket:" . socket_strerror($listen_flag) . "\n"; 
      exit(); 
    } 
     
    echo "waiting for clients to connect\n"; 
     
    while (1) { 
      if (($accept_socket = socket_accept($socket)) == FALSE) { 
        continue; 
      } else { 
        socket_write($accept_socket, $buffer, $len); 
        socket_close($accept_socket); 
      } 
    } 
  } 
   
  function run_server () 
  { 
    $pid1 = pcntl_fork(); 
    if ($pid1 == 0) { 
      // first child process 
       
      // 守护进程的一般流程:fork()->setsid()->fork() 
      posix_setsid(); 
       
      if (($pid2 = pcntl_fork()) == 0) { 
        $address = "192.168.1.71"; 
        $port = "8767"; 
        server_listen_socket($address, $port); 
      } else { 
        // 防止获得控制终端 
        exit(); 
      } 
    } else { 
      // wait for first child process exit 
      pcntl_wait($status); 
    } 
  } 
   
  // server守护进程 
  run_server();
Copier après la connexion

Effet de l'opérationDémarrez le processus de socket côté serveur pour voir s'il s'exécute dans le arrière-plan. L'effet est le suivant :

2015811151526030.png (985×174)

L'accès client est accessible via un navigateur ou curl Ici, curl est utilisé pour accéder directement à

2015811151634550.png (930×64)

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Comment utiliser les fonctions magiques et les constantes magiques PHP

Comment utiliser les méthodes magiques PHP __call et __callStatic

PHP Comment pour lire des fichiers CSV volumineux et les importer dans la base de données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

See all articles