- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要获取远程文件的内容,但需要发送一些 header ,其中之一是“Connection: keep-alive” header ...所以我通过简单调用 file_get_contents() 进行了尝试,像这样:
<?php
$sfheaders="Cache-Control:max-age=0
Connection:keep-alive";
$opts = array(
'http' => array(
'method' => "GET",
'header' => $sfheaders
)
);
$context = stream_context_create($opts);
$url="http://somedomain.com/to.php";
$file = file_get_contents($url, false, $context);
?>
...代码有效,但 file_get_contents 需要 15 秒才能获取数据!看起来 file_get_contents() 在连接关闭后完成,但我希望它在数据传输后完成。如果我删除 keep-alive header 会更快,但这次我需要在连接保持事件状态时获取数据。我想这对 file_get_contents 是不可能的,所以......
有没有办法用 cURL 或其他东西做到这一点?
编辑:让我更准确地说,必须将“Connection:keep-alive” header 发送到我尝试访问的特定服务器,因为它会检查该 header ,如果不发送,则没有数据发给我!明白了吗?
最佳答案
保持连接
通常,如果连接未设置为keep-alive
,一旦 PHP 终止当前脚本,剩余的输出缓冲区将转发到 Web 服务器,后者又将数据转发到客户端。然后网络服务器关闭到客户端(浏览器)的连接。
如果你要求
Connection: keep-alive
服务器就是这样做的:它保持连接打开,即使回复已经完全完成。因此,上述行为就可以了。 此外,例如feof()
不会返回 FALSE - 因为最终可能会收到更多数据。
请注意,您可以在当前运行的 PHP 脚本中重新使用保持连接。但是一旦您的 PHP 脚本完成,保持事件连接将断开。
因此,您不能重用使用下一个 PHP 脚本实例的保持连接。
案例 1 - 请求前已知的数据量
如果您事先知道数据量,您可能只读取该数据量$expectedAmountOfDataInBytes
,然后关闭连接:
$expectedAmountOfDataInBytes = 2023;
$handle = fopen( "http://www.stackoverflow.com/", "r" );
if ( ! is_resource( $handle )) {
echo 'sorry';
exit;
}
while( ( ! feof( $handle ) )
&& ( 0 < $expectedAmountOfDataInBytes-- )
) {
$contents .= fread( $handle, 1 );
}
fclose($handle);
案例 2 - 请求前未知的数据量
如果您事先不知道数据量,则需要提交 HTTP要求
GET /infotext.html HTTP/1.1
Host: www.example.net
然后像这样解析一个答案:
HTTP/1.1 200 OK
Server: Apache/1.3.29 (Unix) PHP/4.3.4
Content-Length: 4
Content-Language: de (nach RFC 3282 sowie RFC 1766)
Connection: close
Content-Type: text/html
ABCD
在 PHP Manuals 中查找基于 sockets I/O 的简单 HTTP 客户端.
关于php - Connection keep-alive 时获取文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187419/
HTTP Keep Alive是如何实现的?它在内部使用 TCP Keep Alive 吗?如果不是,服务器如何检测客户端是死是活? 最佳答案 我知道这是一个老问题,但仍然: HTTP Keep-Al
我尝试添加新标题的方法: request.Headers.GetType().InvokeMember("ChangeInternal", BindingFlags.Instance | Bi
我正在尝试实现一个功能来监听 door 1900 并捕获 Activity 消息和设备 ip,我尝试使用我发现的一些库,但我的应用程序一直在尝试启动应用程序时崩溃。 这是我的主要功能 pub
这是我的 haproxy.conf (haproxy 1.7.9) global log 127.0.0.1 local0 defaults retries 3
所以根据haproxy作者的说法,谁知道关于http的一两件事: Keep-alive was invented to reduce CPU usage on servers when CPUs we
我目前正在设计一个系统,我们需要知道用户是否仍然在线/登录。 该系统是基于 .Net 网络的,因此我们打算使用 AJAX/JSONP 代码来执行此操作,该代码每 2 分钟对服务器执行一次 ping 操
我正在为kong编写一个自定义插件。该插件将根据我的服务器转换请求/响应。我得到[info] 27#0: *588 client closed keepalive connection . 经过一番
如果一个网络服务器服务于多个虚拟主机(可以由客户端在HTTP请求头Host中选择)并且支持Keep-Alive,客户端是否允许使用不同的 Host header 通过同一连接发送后续请求? 最佳答
我正在查看 HTTP 1.1 spec 并且正在查看规范中与“Connection” header 相关的部分。我注意到为“连接” header 指定的唯一标记是“关闭”。经过一番挖掘后,我发现许多服
HTTP/1.1 服务器默认使用 Connection header 的 Keep-Alive 设置。为什么那么大多数浏览器是否在他们的请求中包含 Connection: Keep-Alive ,即使
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
据我所知,在 TCP 套接字上保持事件状态有助于了解套接字是否刚刚打开以及两个套接字之间的连接是否实际上处于事件状态。所以,我有几个关于 Winsocks2 中 Keepalive 用法的问题想咨询一
全部, 我有一个网站,该网站使用经典的 ASP 和 Crystal 报表根据用户在网页中的输入(查询后端数据库)生成报告。如果报告运行时间超过 30 分钟,则位于客户端和 Web 服务器之间的防火墙将
基本上,我想让 router-view 中的 2 个组件保持事件状态,并且它可以工作,但是,我不知道我是否做对了。 users 和 data 是路由名称。这是正确的方法吗? keep
我使用 ruby1.9.2p180(2011-02-18 修订版 30909)i686-linux。 Fiber#alive? 返回未定义的错误: fiber = Fiber.new{puts '
我在 macOS 本地主机上运行用 Go (1.12) 编写的客户端和套接字服务器。 服务器在 net.TCPConn 上设置 SetKeepAlive 和 SetKeepAlivePeriod。 客
用过 vue-element-admin 的同学一定很清楚,路由的配置直接关系侧边栏导航菜单的展示,也得益于这种设计思路,几乎大部分后台框架都采用这个方案,当然也包括了我写的 Fantastic-a
在项目开发过程中加载、启动、下载项目难免会用到进度条,如何使用Python实现进度条呢? 这里为小伙伴们分享四种Python实现进度条的库:Progress库、tqdm库、alive-progre
基本上,就是它所说的。 有什么意义? ?这听起来可能很愚蠢,但我认为其目的是缓存与当前未在 DOM 中呈现的组件关联的数据。根据this bug/issue , 专门设计用于在从页面中删除元素时删
Jmeter 中保持事件选项的用途是什么,它的工作原理是什么? 我使用 Jmeter 3.0 进行了性能测试 在我录制的脚本中保持事件选项被选中。 所以我在我的真实测试脚本中使用了保持事件选项 如果我
我是一名优秀的程序员,十分优秀!