fsockopen 异步非阻塞式请求数据
index.php
<?php
ini_set ( "max_execution_time", "0" );
// 要传递的数据
$form_data = array (
'name' => 'testname',
'gender' => 'man'
); // 提交的文件信息
$file_data = array(
array(
'name' => 'photo',
'filename' => 'photo.jpg',
'path' => 'photo.jpg'
)
); // 请求地址端口信息
// 请求的域名例:baidu.com,这里是 localhost
$host = 'localhost';
$port = 80;
$errno = '';
$errstr = '';
// 设置连接超时时间
$timeout = 60;
// 请求域名后详细地址
$url = '/test/index2.php?testget=testval';
//如果是GET 请求,可直接将编译后的参数放到url上
//$url = $url . '?' . http_build_query ( $form_data );
//请求方式
$method = "POST"; // 创建连接句柄
$fp = fsockopen ( $host, $port, $errno, $errstr, $timeout );
if (! $fp) {
return false;
} // 0,资源流将会被转换为非阻塞模式;如果是1,资源流将会被转换为阻塞模式
// 将此链接句柄变为非阻塞模式,如果传值中有文件,则异步无效,并且传值数组中文件以后的传值内容也无法正常传值
stream_set_blocking ( $fp, 0 ); //POST传值有两种方式
//===================== 第一种,无需传递文件 =====================
//格式化一下
$data = http_build_query ( $form_data );
// 也可以传递json数据,直接json编译下数组即可
// $data = json_encode ( $form_data ) ;
//===================== 第一种,无需传递文件结束 ===================== //===================== 第二种,可以传递文件,但不能设置 stream_set_blocking 等于 0 =====================
/*
srand((double)microtime()*1000000);
$boundary = "---------------------------".substr(md5(rand(0,32000)),0,10); $data = "--$boundary\r\n";
foreach($form_data as $key=>$val){
$data .= "Content-Disposition: form-data; name=\"".$key."\"\r\n";
$data .= "Content-type:text/plain\r\n\r\n";
$data .= rawurlencode($val)."\r\n";
$data .= "--$boundary\r\n";
} // file data
foreach($file_data as $file){
//获取文件的类型信息
$magicFile = get_cfg_var("magic_mime.magic");
//要想使用 finfo 方法,需打开 php.ini 中 extension=php_fileinfo.dll 设置
$finfo = new finfo(FILEINFO_MIME,$magicFile);
//拼接提交文件的头信息
$data .= "Content-Disposition: form-data; name=\"".$file['name']."\"; filename=\"".$file['filename']."\"\r\n";
$data .= "Content-Type: ". $finfo->file($file['path']) ."\r\n\r\n";
$data .= implode("",file($file['path']))."\r\n";
$data .= "--$boundary\r\n";
} $data .="--\r\n\r\n";
*/
//===================== 第二种,可以传递文件结束 ===================== // 连接句柄不报错就拼接请求内容
$out = "${method} ${url} HTTP/1.1\r\n";
$out .= "Host:${host}\r\n"; //==============不同传值方式 Content-type 值============================
//GET及POST第一种,无需传递文件
$out .= "Content-type:application/x-www-form-urlencoded\r\n";
//POST第二种,可以传递文件
//$out .= "Content-type:multipart/form-data; boundary=$boundary\r\n";
//==============不同传值方式 Content-type 值结束============================ $out .= "Content-length:" . strlen ( $data ) . "\r\n";
$out .= "Connection:close\r\n\r\n";
$out .= "${data}"; // 发送请求
fputs ( $fp, $out ); // 非阻塞模式需要设置系统延时,否则程序会不等待收到结果就往下执行代码,这时会有获取不到结果的情况
// 具体设置延时多长时间,具体还要看接口的响应时间多久
usleep ( 5000 ); // 获取返回内容(包含响应头信息)
$response = ''; while ( $row = fread ( $fp, 4096 ) ) {
$response .= $row;
}
//关闭链接
fclose ( $fp ); // 过滤返回的响应头信息
// strpos() 函数查找字符串在另一字符串中第一次出现的位置。
$pos = strpos ( $response, "\r\n\r\n" );
$header = substr ( $response, 0, $pos );
$result = substr ( $response, $pos + 4 ); echo $header,"<br/>";
// 输出返回结果
echo $result;
index2.php
<?php
echo $_POST ['name'], "<br/>";
echo $_POST ['gender'], "<br/>";
echo $_GET ['testget'], "<br/>"; $filename = time () . '.jpg';
if (move_uploaded_file ( $_FILES ['photo'] ['tmp_name'], $filename )) {
echo '<img src="' . $filename . '">';
} /*
//post json方式传值
$data = file_get_contents('php://input');
$data = json_decode($data,true);
echo $data['name'],"<br/>";
echo $data['gender'],"<br/>";
*/
exit ();
fsockopen 异步非阻塞式请求数据的更多相关文章
- flask 实现异步非阻塞----gevent
我们都知道,flask不支持异步非阻塞的请求,我们可以创建一个新项目去测试一下,推荐大家使用pycharm去开发我们的flask 使用特别的方便. rom flask import Flask im ...
- 使用tornado让你的请求异步非阻塞
http://www.dongwm.com/archives/shi-yong-tornadorang-ni-de-qing-qiu-yi-bu-fei-zu-sai/?utm_source=tuic ...
- 阻塞式I/0 和 非阻塞式I/O 同步异步详细介绍
请求描述: `阻塞/非阻塞` 和 `同步/异步` 不是一个概念.举几个简单的例子. 当进程调用一个进行IO操作的API时(比如read函数),在数据没有到达前,read 会挂起,进程会卡住.在数据读取 ...
- 在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
nginx平台初探(100%) — Nginx开发从入门到精通 http://ten 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来 ...
- 并发式IO的解决方案:多路非阻塞式IO、多路复用、异步IO
在Linux应用编程中的并发式IO的三种解决方案是: (1) 多路非阻塞式IO (2) 多路复用 (3) 异步IO 以下代码将以操作鼠标和键盘为实例来演示. 1. 多路非阻塞式IO 多路非阻塞式IO访 ...
- Flask实现异步非阻塞请求功能
pip install gevent 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是 ...
- Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别
1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...
- 利用tornado使请求实现异步非阻塞
基本IO模型 网上搜了很多关于同步异步,阻塞非阻塞的说法,理解还是不能很透彻,有必要买书看下. 参考:使用异步 I/O 大大提高应用程序的性能 怎样理解阻塞非阻塞与同步异步的区别? 同步和异步:主要关 ...
- 阻塞式和非阻塞式IO
有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...
随机推荐
- python 模块路径查找 及 添加
**** python 模块路径查找: 通过模块的__file__属性来确定: **** 模块路径添加: 方法一:函数添加1 import sys2 查看sys.path3 添加sys.path.ap ...
- 动手打造轻量web服务器(二)路由
tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...
- 20155330 2016-2017-2 《Java程序设计》第四周学习总结
20155330 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了 ...
- [arc068E]Snuke Line-[树状数组]
Description 传送门 Solution 假如想直接YY对于每一个d会有多少种商品满足条件,em反正我搞不定. 然后大佬的题解告诉我说:搞不定?那就不搞它啊,反过来不就得了? 好吧.我们来考虑 ...
- vcruntime140.dll 丢失64位系统
1. 下载VC Redistributable for VS2015,网址https://www.microsoft.com/en-us/download/confirmation.aspx?id=4 ...
- [cogs347]地震
COGS:地震(平衡树) COGS上一道题...文件名是equake 还是又打了一遍板子... 加个lazy标记就行了... 注意查询时先下传标记(lazy) // It is made by XZZ ...
- 读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- WebAPI学习笔记
WebAPI WebApi是添加到Asp.Net平台的一个新特性,可以快速的创建Web服务,并对客户端提供HTTP的API调用接口 WebApi是建立在MVC框架基础之上,但不属于MVC的一部分. 序 ...
- git分支在团队中的使用
须知 在介绍分支常用操作之前 我们需要知道几点: 1.主干不允许做任何修改结构或者业务的操作. 有两种情况可以修改主干: 就是当前主干已经是有问题的,合并后出问题发布不了. 修改与业务无关的配置文件, ...
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...