Rumah php教程 php手册 PHP中Libevent HTTP客户端实现程序

PHP中Libevent HTTP客户端实现程序

May 26, 2016 am 08:19 AM
http pelanggan

下面来给各位介绍一段用php实现的Libevent HTTP客户端实现程序,有需要了解的朋友可与小编一起来学习一下.

php Libevent HTTP,代码如下:

<?php 
	//请求完成回调 
	function _request_handler($req, $base) { 
	  global $pend_req; 
	  //echo __FUNCTION__, PHP_EOL; 
	 
	  if (is_null($req)) { 
	    //echo "Timed out\n"; 
	  } else { 
	    $response_code = $req->getResponseCode(); 
	 
	    if ($response_code == 0) { 
	      //echo "Connection refused\n"; 
	    } elseif ($response_code != 200) { 
	      //echo "Unexpected response: $response_code\n"; 
	    } else { 
	      //echo "Success: $response_code\n"; 
	      /* 
	      $buf = $req->getInputBuffer(); 
	      echo "Body:\n"; 
	      while ($s = $buf->readLine(EventBuffer::EOL_ANY)) { 
	      echo $s, PHP_EOL; 
	      } 
	       */ 
	    } 
	  } 
	  $pend_req--; 
	  //退出循环 
	  if (!$pend_req) { 
	    $base = $conn->getBase(); 
	    $base->exit(NULL); 
	  } 
	  //释放内存 
	  unset($req); 
	  unset($conn); 
	} 
	 
	//$address = "www.phprm.com"; 
	$pend_req = 0; 
	$port = 80; 
	//初始化event base 
	$base = new EventBase(); 
	echo "Event method used: ", $base->getMethod(), PHP_EOL; 
	 //使用异步DNS 
	$dns_base = new EventDnsBase($base, TRUE); 
	$f= fopen("./50000.txt","r"); 
	while (!feof($f)) 
	{ 
	  $line = fgets($f); 
	  //echo $address; 
	  $address = trim($line); 
	  //新建http连接事件到base 
	  $conn = new EventHttpConnection($base, $dns_base, $address, $port); 
	  $conn->setTimeout(1); 
	  //设置请求回调 
	  $req = new EventHttpRequest("_request_handler", $conn); 
	   
	  $req->addHeader("Host", $address, EventHttpRequest::OUTPUT_HEADER); 
	  $req->addHeader("Content-Length", "0", EventHttpRequest::OUTPUT_HEADER); 
	  $conn->makeRequest($req, EventHttpRequest::CMD_GET, "/"); 
	  $pend_req++; 
	} 
	fclose($f); 
	//事件主循环 
	$base->loop(); 
	 
Salin selepas log masuk

c语言版,代码如下:

#include <stdio.h> 
	#include <string.h> 
	#include <ctype.h> 
	#include <stdlib.h> 
	#include <signal.h> 
	#include <unistd.h> 
	#include <evhttp.h> 
	#include <event2/event.h> 
	#include <event2/http.h> 
	#include <event2/bufferevent.h> 
	typedef struct my_struct_s my_struct_t; 
	 
	struct my_struct_s { 
	  struct evhttp_connection *conn; 
	  struct evhttp_request *req; 
	  struct evhttp_uri *uri; 
	  struct event *cleanup; 
	}; 
	 
	struct event_base *Base_Primary; 
	 
	char *trimwhitespace(char *str) 
	{ 
	  char *end; 
	 
	  // Trim leading space 
	  while(isspace(*str)) str++; 
	 
	  if(*str == 0)  // All spaces? 
	    return str; 
	 
	  // Trim trailing space 
	  end = str + strlen(str) - 1; 
	  while(end > str && isspace(*end)) end--; 
	 
	  // Write new null terminator 
	  *(end+1) = 0; 
	 
	  return str; 
	} 
	 
	void connection_free(int sock, short which, void *arg) { 
	  //printf("freeing connection!!! The socket&#39;s FD would have been closed when the HTTP request ended and the ->req object would have been free&#39;d\n"); 
	 
	  // Get our structure object 
	  my_struct_t *myStruct = arg; 
	 
	  // Cleanup our properties 
	  event_free(myStruct->cleanup); 
	  evhttp_connection_free(myStruct->conn); 
	  evhttp_request_free(myStruct->req); 
	  evhttp_uri_free(myStruct->uri); 
	 
	  // Free our custom structure 
	  free(myStruct); 
	} 
	 
	void http_request_done(struct evhttp_request *req, void *arg){ 
	 
	  // Get our custom struct 
	  my_struct_t *myStruct = arg; 
	 
	  // Setup our timeout information (we delay 5 seconds) 
	  struct timeval Timeout; 
	  Timeout.tv_sec = 0; 
	  Timeout.tv_usec = 0; 
	 
	  // Add this structure to our cleanup base to be cleaned up synchronously 
	  // TODO: Probably not the best way to cleanup and event, but it&#39;l work for the purposes of illustration. 
	  // This way would ensure no race conditions exist, but it&#39;s probably not the most efficient depending on how many requests, etc we&#39;re dealing with. 
	  myStruct->cleanup = evtimer_new(Base_Primary, connection_free, (void *)myStruct); 
	  evtimer_add(myStruct->cleanup, &Timeout); 
	 
	  //printf("http_request_done, we put our custom strucutre into a cleanup event to be freed!\n"); 
	} 
	 
	int http_req(char *uri) { 
	 
	  // Allocate our custom struture 
	  my_struct_t *myStruct = malloc(sizeof(my_struct_t)); 
	 
	  // Create our EVHTP connection and request 
	  myStruct->uri = evhttp_uri_parse(uri); 
	  myStruct->conn = evhttp_connection_base_new(Base_Primary, NULL, uri, 80); 
	  myStruct->req = evhttp_request_new(http_request_done, myStruct); 
	  evhttp_add_header(evhttp_request_get_output_headers(myStruct->req), "Host", "localhost"); 
	  evhttp_add_header(evhttp_request_get_output_headers(myStruct->req), "Connection", "close"); 
	  evhttp_make_request(myStruct->conn, myStruct->req, EVHTTP_REQ_GET, uri); 
	  evhttp_connection_set_timeout(myStruct->req->evcon, 2); 
	  return 1; 
	} 
	 
	 
	// Define our primary function 
	int main(int argc, char *argv[]) { 
	 
	  // Initialize our bases 
	  Base_Primary = event_base_new(); 
	 
	  char filename[] = "/tmp/50000.txt"; //文件名 
	  FILE *fp;  
	  char StrLine[1024];             //每行最大读取的字符数 
	  char *host; 
	  if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读 
	  {  
	    printf("error!");  
	    return -1;  
	  }  
	 
	  while (!feof(fp))  
	  {  
	    fgets(StrLine,1024,fp);  //读取一行 
	    host = StrLine; 
	    host = trimwhitespace(host); 
	    //printf("%s", host); //输出 
	    http_req(host); 
	  } 
	  fclose(fp);   
	 
	  // 
	  //event_base_loop(Base_Primary); 
	  event_base_dispatch(Base_Primary); 
	 
	  // Free our primary base 
	  event_base_free(Base_Primary); 
	  return 1; 
	}
Salin selepas log masuk

文章地址:

转载随意^^请带上本文地址!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggunakan klien HTTP dengan rangka kerja Amphp? Bagaimana untuk menggunakan klien HTTP dengan rangka kerja Amphp? Jun 05, 2023 pm 02:01 PM

Rangka kerja Amphp ialah rangka kerja pengaturcaraan tak segerak PHP yang cekap yang menyokong pelbagai protokol dan komponen, yang mana klien HTTP adalah salah satu komponen terasnya. Menggunakan klien HTTP dalam rangka kerja Amphp, kami boleh menghantar permintaan HTTP tak segerak dan respons proses dengan mudah, dengan itu meningkatkan prestasi dan kebolehskalaan aplikasi web yang kami bina. Artikel ini akan memperkenalkan cara menggunakan klien HTTP dalam rangka kerja Amphp. 1. Pasang rangka kerja Amphp sebelum mula menggunakan klien HTTP rangka kerja Amphp.

Pelanggan HTTP tak segerak baharu dalam PHP8.1 Pelanggan HTTP tak segerak baharu dalam PHP8.1 Jul 08, 2023 pm 07:24 PM

Pelanggan HTTP tak segerak baharu dalam PHP8.1 Dengan perkembangan pesat Internet, prestasi pelbagai aplikasi web menjadi semakin penting. Untuk memberikan pengalaman pengguna yang lebih baik, pembangun perlu menggunakan alat dan teknik yang cekap untuk mengendalikan pelbagai permintaan rangkaian. Nasib baik, PHP8.1 memperkenalkan ciri baharu, klien HTTP tak segerak, yang membolehkan kami melaksanakan permintaan HTTP tanpa menyekat, sekali gus meningkatkan prestasi aplikasi. Dengan klien HTTP tak segerak kami boleh meneruskan pelaksanaan selepas menghantar permintaan

Cara menggunakan Swoole untuk melaksanakan klien HTTP berprestasi tinggi Cara menggunakan Swoole untuk melaksanakan klien HTTP berprestasi tinggi Jun 25, 2023 am 11:53 AM

Dalam aplikasi web moden, klien HTTP adalah komponen penting. Ia boleh digunakan untuk mengakses API REST, bertukar data dan melakukan panggilan prosedur jauh. Walau bagaimanapun, sesetengah pelaksanaan klien HTTP konvensional mungkin menghadapi masalah prestasi seperti kependaman rangkaian, mengendalikan sejumlah besar permintaan, dsb. Swoole, pustaka rangkaian berprestasi tinggi berdasarkan PHP, boleh menyelesaikan masalah ini dengan berkesan. Dalam artikel ini, kami akan meneroka cara menggunakan Swoole untuk melaksanakan klien HTTP berprestasi tinggi. 1. Pengetahuan asas mendalam dalam diri kita

Penjelasan terperinci tentang klien HTTP dan kumpulan sambungan rangka kerja Gin Penjelasan terperinci tentang klien HTTP dan kumpulan sambungan rangka kerja Gin Jun 23, 2023 am 10:19 AM

Rangka kerja Gin ialah rangka kerja web ringan yang direka bentuk untuk menyediakan model pemprosesan web berprestasi tinggi dan ketersediaan tinggi. Dalam rangka kerja Gin, klien HTTP dan kumpulan sambungan adalah komponen yang sangat penting. Artikel ini akan menyelidiki butiran pelaksanaan asas klien HTTP dan kumpulan sambungan dalam rangka kerja Gin. 1. Pelanggan HTTP Pelanggan HTTP ialah komponen teras dalam rangka kerja Gin untuk menghantar permintaan HTTP. Dalam rangka kerja Gin, terdapat banyak cara yang berbeza untuk melaksanakan klien HTTP, tetapi dua cara yang paling biasa digunakan ialah

Mengapa program Go saya tidak menggunakan perpustakaan klien HTTP dengan betul? Mengapa program Go saya tidak menggunakan perpustakaan klien HTTP dengan betul? Jun 10, 2023 am 08:57 AM

Bahasa Go ialah bahasa pengaturcaraan yang sangat popular dalam beberapa tahun kebelakangan ini Ia digunakan secara meluas dalam pembangunan web, pengaturcaraan sistem, pengkomputeran awan dan bidang lain. Ini adalah senario yang sangat biasa untuk menggunakan protokol HTTP untuk komunikasi rangkaian dalam bahasa Go Untuk menulis program klien HTTP dengan mudah, bahasa Go menyediakan pakej net/http dan sub-pakej berkaitannya yang disertakan dengan perpustakaan standard. Walau bagaimanapun, kadangkala kami menghadapi beberapa masalah apabila menggunakan perpustakaan klien HTTP Contohnya, program tidak boleh mendapatkan data yang dikembalikan oleh pelayan rangkaian atau program klien dengan betul

Bagaimana untuk menghantar permintaan GET dan menghuraikan respons menggunakan fungsi klien HTTP dalam bahasa Go? Bagaimana untuk menghantar permintaan GET dan menghuraikan respons menggunakan fungsi klien HTTP dalam bahasa Go? Jul 29, 2023 am 10:30 AM

Bagaimana untuk menghantar permintaan GET dan menghuraikan respons menggunakan fungsi klien HTTP dalam bahasa Go? 1. Pengenalan kepada fungsi klien HTTP Dalam bahasa Go, perpustakaan standard menyediakan fungsi untuk melaksanakan klien HTTP. Fungsi ini boleh digunakan untuk menghantar pelbagai jenis permintaan HTTP dan menghuraikan respons. Dalam artikel ini, kami akan menumpukan pada cara menggunakan fungsi klien HTTP untuk menghantar permintaan GET dan menghuraikan respons. 2. Menghantar permintaan GET Dalam bahasa Go, menghantar permintaan GET boleh dilaksanakan melalui fungsi http.Get().

Gunakan Swoole untuk merangkum klien HTTP tak segerak yang sangat boleh dipercayai Gunakan Swoole untuk merangkum klien HTTP tak segerak yang sangat boleh dipercayai Jun 13, 2023 pm 03:29 PM

Apabila aplikasi web terus berkembang, keperluan untuk klien HTTP menjadi semakin penting, terutamanya apabila data diminta merentas rangkaian. Dalam pelaksanaan PHP tradisional, ia adalah cara biasa untuk menggunakan perpustakaan seperti cURL untuk membuat permintaan rangkaian, tetapi ia tidak menyokong permintaan tak segerak, mengakibatkan pengehadan prestasi apabila sejumlah besar permintaan serentak berlaku. Swoole ialah enjin komunikasi rangkaian coroutine berdasarkan PHP Ia menyediakan kaedah permintaan tak segerak yang boleh meningkatkan prestasi aplikasi. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk membungkus a

Ralat Java: Ralat Pelanggan HTTP Standard Java11, Cara Mengendalikan dan Mengelak Ralat Java: Ralat Pelanggan HTTP Standard Java11, Cara Mengendalikan dan Mengelak Jun 25, 2023 am 10:26 AM

Java telah menjadi salah satu bahasa pengaturcaraan yang paling popular hari ini. Walau bagaimanapun, walaupun bahasa pengaturcaraan terbaik boleh membuat kesilapan. Salah satu isu biasa ialah ralat klien HTTP standard Java11. Dalam artikel ini, kami akan mendalami punca ralat klien HTTP standard Java 11, cara untuk mengendalikan dan mengelakkannya. Apakah ralat pelanggan HTTP standard Java11? Ralat klien HTTP standard Java11 merujuk kepada kemungkinan yang mungkin anda hadapi apabila menggunakan pelaksanaan klien HTTP standard Java11.

See all articles