Maison > Questions et réponses > le corps du texte
Écrivez votre propre serveur http, le serveur écoute le socket et le thread handle_request gère les requêtes dynamiques PHP du navigateur.
...
tandis que(1){
if(-1 == (client_fd = accept(sockfd, (struct sockaddr *) &client_sock, &sin_size))) err_exit("accepter");
if(pthread_create(&ntid, NULL, (void *)handle_request, &client_fd) != 0) err_exit("pthread_create");
}
fermer(sockfd);
renvoie 0 ;
Après avoir communiqué avec php-fpm dans handle_request, j'ai obtenu le résultat de l'exécution msg. msg contient deux lignes d'informations d'en-tête de réponse http, une ligne vide et le corps de la réponse (le résultat de l'exécution du code php), et ensuite je n'ai besoin que de pour ajouter une ligne de réponse, un paquet de réponse http est construit et finalement envoyé au client.
...
/* Envoyer la réponse */
sprintf(en-tête, "%s 200 OK\r\n", hr->version);
//printf("%s%s\n", en-tête, msg);
send(client_fd, en-tête, strlen(en-tête), 0);
envoyer(client_fd, msg, contentLength, 0);
gratuit (msg);
fermer(client_fd);
Ce qui est étrange, c'est que lorsque j'y accède dans le navigateur, les résultats de l'exécution de PHP défilent, puis il me demande que la connexion a été réinitialisée
Firefox ne parvient pas à établir une connexion avec le serveur à l'adresse 127.0.0.1:8899.
Lors d'un test sur telnet, un message de réponse http complet peut être reçu
Essayer 127.0.0.1...
Connecté à 127.0.0.1.
Le caractère d'échappement est '^]'.
OBTENIR /index.php HTTP/1.1
HTTP/1.1 200 OK
X-Powered-By : PHP/5.5.9-1ubuntu4.21
Type de contenu : texte/html
bonjour tout le mondeConnexion fermée par un hôte étranger.
programme php
<?php
echo "bonjour tout le monde" ;
世界只因有你2017-05-16 13:02:37
Votre problème de conception est très sérieux. Vous devez &client_fd
传到pthread_create
很可能会引起连接丢失,因为你无法保证handle_request
在下一个accpet
l'implémenter avant qu'il réussisse. Un autre problème est que votre conception est terrible, au moins l'ensemble du pool de threads sera affecté...