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 异步非阻塞式请求数据的更多相关文章

  1. flask 实现异步非阻塞----gevent

    我们都知道,flask不支持异步非阻塞的请求,我们可以创建一个新项目去测试一下,推荐大家使用pycharm去开发我们的flask  使用特别的方便. rom flask import Flask im ...

  2. 使用tornado让你的请求异步非阻塞

    http://www.dongwm.com/archives/shi-yong-tornadorang-ni-de-qing-qiu-yi-bu-fei-zu-sai/?utm_source=tuic ...

  3. 阻塞式I/0 和 非阻塞式I/O 同步异步详细介绍

    请求描述: `阻塞/非阻塞` 和 `同步/异步` 不是一个概念.举几个简单的例子. 当进程调用一个进行IO操作的API时(比如read函数),在数据没有到达前,read 会挂起,进程会卡住.在数据读取 ...

  4. 在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树

    nginx平台初探(100%) — Nginx开发从入门到精通 http://ten 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来 ...

  5. 并发式IO的解决方案:多路非阻塞式IO、多路复用、异步IO

    在Linux应用编程中的并发式IO的三种解决方案是: (1) 多路非阻塞式IO (2) 多路复用 (3) 异步IO 以下代码将以操作鼠标和键盘为实例来演示. 1. 多路非阻塞式IO 多路非阻塞式IO访 ...

  6. Flask实现异步非阻塞请求功能

    pip install gevent 关于gevent Gevent 是一个 Python 并发网络库,它使用了基于 libevent 事件循环的 greenlet 来提供一个高级同步 API.下面是 ...

  7. Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

    1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于 ...

  8. 利用tornado使请求实现异步非阻塞

    基本IO模型 网上搜了很多关于同步异步,阻塞非阻塞的说法,理解还是不能很透彻,有必要买书看下. 参考:使用异步 I/O 大大提高应用程序的性能 怎样理解阻塞非阻塞与同步异步的区别? 同步和异步:主要关 ...

  9. 阻塞式和非阻塞式IO

    有很多人把阻塞认为是同步,把非阻塞认为是异步:个人认为这样是不准确的,当然从思想上可以这样类比,但方式是完全不同的,下面说说在JAVA里面阻塞IO和非阻塞IO的区别 在JDK1.4中引入了一个NIO的 ...

随机推荐

  1. UVA 514 - Rails ( 铁轨)

    from my CSDN: https://blog.csdn.net/su_cicada/article/details/86939523 例题6-2 铁轨(Rails, ACM/ICPC CERC ...

  2. Freemarker入门(一)——入门与基本概述

    1.概述 1.文档 完美的中文文档:http://freemarker.foofun.cn/ 2.是什么 FreeMarker是一个用Java语言编写的模板引擎.它基于模板来生成文本输出.Freema ...

  3. 20155226 mini DC 课堂测试补交

    由于电脑突然出了点问题,我没有完成mini DC这个测试,现将测试内容及结果补交 题目如下 提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 代码如下 MyDC.clas ...

  4. 与虚拟机和linux的初次接触

    初次接触虚拟机 根据老师所给的资源和教程,虚拟机安装的过程十分顺利. 接下来是在虚拟机上安装linux操作系统我下载了破解版的Ubuntu,也是十分顺利 接下来就是安装虚拟机增强功能,命令有些繁琐,在 ...

  5. 20155318 2016-2017-2 《Java程序设计》第十周学习总结

    20155318 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 学习目标 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java ...

  6. 2016-2017-2 20155339《 java面向对象程序设计》实验四Android程序设计

    2016-2017-2 20155339< java面向对象程序设计>实验四Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Andr ...

  7. 4040 EZ系列之奖金 (拓扑)

    4040 EZ系列之奖金 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond         题目描述 Description 由于无敌的WRN在2015年世界英俊帅 ...

  8. 2017"百度之星"程序设计大赛 - 初赛(A) 小C的倍数问题

    谢谢帮忙刷访问量! 题解当然下考再发啦 答案为P-1的约数个数 // It is made by XZZ #include<cstdio> #include<algorithm> ...

  9. log4net始终占用日志文件的问题

    在appender 下面加 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

  10. .net core 部署 Docker 所遇到的几个问题

    1.Connection reset by peer 造成这个问题的主要原因是在program.cs 文件中,未加入端口: public static IWebHostBuilder CreateWe ...