php - Mengapa sambungan soket ditetapkan semula?
某草草
某草草 2017-05-16 13:00:37
0
1
576

Tulis pelayan http anda sendiri, pelayan mendengar soket dan benang handle_request mengendalikan permintaan dinamik PHP pelayar.

... manakala(1){ if(-1 == (client_fd = accept(sockfd, (struct sockaddr *) &client_sock, &sin_size))) err_exit("accept"); if(pthread_create(&ntid, NULL, (void *)handle_request, &client_fd) != 0) err_exit("pthread_create"); } tutup(sockfd); pulangan 0;

Selepas berkomunikasi dengan php-fpm dalam handle_request, saya memperoleh msg hasil pelaksanaan mengandungi dua baris maklumat pengepala respons http, baris kosong dan badan respons (hasil pelaksanaan kod php), dan kemudian saya hanya perlukan. untuk menambah baris respons , paket respons http dibina dan akhirnya dihantar kepada klien.

... /* Hantar jawapan */ sprintf(header, "%s 200 OK\r\n", hr->version); //printf("%s%s\n", pengepala, msg); hantar(client_fd, header, strlen(header), 0); hantar(client_fd, msg, contentLength, 0); percuma(msg); close(client_fd);

Perkara yang aneh ialah apabila saya mengaksesnya dalam penyemak imbas, hasil pelaksanaan php melepasi, dan kemudian ia menggesa bahawa sambungan telah ditetapkan semula

Firefox tidak dapat mewujudkan sambungan ke pelayan di 127.0.0.1:8899.

Apabila diuji pada telnet, mesej respons http yang lengkap boleh diterima

Mencuba 127.0.0.1...
Disambungkan ke 127.0.0.1.
Watak melarikan diri ialah '^]'.
DAPATKAN /index.php HTTP/1.1
HTTP/1.1 200 OK
X-Powered-Oleh: PHP/5.5.9-1ubuntu4.21
Jenis kandungan: teks/html

hello worldSambungan ditutup oleh hos asing.

program php

<?php
    echo "hello world";
某草草
某草草

membalas semua(1)
世界只因有你

Masalah reka bentuk anda sangat serius Anda mesti &client_fd传到pthread_create很可能会引起连接丢失,因为你无法保证handle_request在下一个accpetmelaksanakannya sebelum ia berjaya

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan