0

0

PHP中Libevent HTTP客户端实现程序

php中文网

php中文网

发布时间:2016-05-26 08:19:40

|

2270人浏览过

|

来源于php中文网

原创

下面来给各位介绍一段用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(); 
	 

WeWedding婚纱影楼小程序
WeWedding婚纱影楼小程序

婚纱影楼小程序提供了一个连接用户与影楼的平台,相当于影楼在微信的官网。它能帮助影楼展示拍摄实力,记录访客数据,宣传优惠活动。使用频率高,方便传播,是影楼在微信端宣传营销的得力助手。功能特点:样片页是影楼展示优秀摄影样片提供给用户欣赏并且吸引客户的。套系页是影楼根据市场需求推出的不同套餐,用户可以按照自己的喜好预定套系。个人中心可以查看用户预约的拍摄计划,也可以获取到影楼的联系方式。

下载

立即学习PHP免费学习笔记(深入)”;

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's FD would have been closed when the HTTP request ended and the ->req object would have been free'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'l work for the purposes of illustration. 
	  // This way would ensure no race conditions exist, but it's probably not the most efficient depending on how many requests, etc we'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; 
	}

立即学习PHP免费学习笔记(深入)”;

文章地址:

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

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

463

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

135

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

64

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

26

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

14

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

524

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

53

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 834人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号