我正在创建一些到HTTP服务器的暂停连接(彗星,反向ajax等).它工作正常,但我看到浏览器只允许两个同时挂起到给定域的连接.因此,如果用户在浏览器的Tab1中查看我的网站,那么也尝试在Tab2中加载它们,他们已经用尽了两个允许的连接到我的网站.
我想我可以做一些通配域的东西,我有我的http服务器解析我的网站的任何地址,如:
*.example.com/webapp -> 192.0.2.1 (the actual ip of my server)
Run Code Online (Sandbox Code Playgroud)
所以:
a.example.com/webapp
b.example.com/webapp
c.example.com/webapp
Run Code Online (Sandbox Code Playgroud)
所有仍然指向(www.example.com/webapp)但浏览器认为它们是不同的域,所以我没有遇到2连接限制.这是真的?
即使这是真的 - 所有域中每个浏览器的活动连接数是否有限制?假设我使用上面的方案 - 例如,Firefox在任何给定时间只允许24个并行连接吗?就像是:
1) a.example.com/webapp
2) www.download.example/hugefile.zip
3) b.example.com/webapp
4) c.example.com/webapp
...
24) x.example.com/webapp
25) // Error - all 24 possible connections currently in use!
Run Code Online (Sandbox Code Playgroud)
我刚刚选择了24个连接/ Firefox作为示例.
html web-applications http persistent-connection web-performance
我非常频繁地(> = 1 /秒)对API端点进行HTTP POST,我想确保我有效地进行.我的目标是尽快成功或失败,特别是因为我有单独的代码来重试失败的POST.有一个很好的HttpClient性能提示页面,但我不确定是否详尽地实现它们都会带来真正的好处.这是我现在的代码:
public class Poster {
private String url;
// re-use our request
private HttpClient client;
// re-use our method
private PostMethod method;
public Poster(String url) {
this.url = url;
// Set up the request for reuse.
HttpClientParams clientParams = new HttpClientParams();
clientParams.setSoTimeout(1000); // 1 second timeout.
this.client = new HttpClient(clientParams);
// don't check for stale connections, since we want to be as fast as possible?
// this.client.getParams().setParameter("http.connection.stalecheck", false);
this.method = new PostMethod(this.url);
// custom …Run Code Online (Sandbox Code Playgroud) 如何在PHPMailer中启用持久性SMTP连接?
我会发送很多电子邮件,所以通过持久连接,我可能会获得性能提升.
我正在尝试编写一个BASH命令,该命令使用CURL将GET请求发送到两个不同的网页,但使用相同的连接.对我来说,就像向登录页面发送GET请求以向服务器进行身份验证,然后第二个请求模仿自动重定向到主页,这将发生在Web浏览器中(通过元刷新标记).我需要链接请求,因为主页的内容(由服务器生成)对于访客用户而言不同于经过身份验证的用户.
我首先根据SOF帖子的推荐尝试了这个命令(假设变量$IP并且$PORT已经用有效值定义):
curl -u user:pass ${IP}:${PORT}/login.php && curl ${IP}:${PORT}/index.php
Run Code Online (Sandbox Code Playgroud)
但是,我总是在第一个GET结束和第二个GET开始之间发生这样的事情:
* Connection #0 to host 10.0.3.153 left intact
* Closing connection #0
Run Code Online (Sandbox Code Playgroud)
那么SOF的帖子错了吗?无论如何,执行此命令将成功保持两个请求之间的连接打开:
curl -u user:pass ${IP}:${PORT}/login.php ${IP}:${PORT}/index.php
Run Code Online (Sandbox Code Playgroud)
但是,我真的更喜欢比前一个命令更接近前一个命令的解决方案.主要原因是将第一页的输出与第二页的输出分成两个不同的输出文件.所以我想做一些事情:
curl page1.html > output1 && curl page2.html > output2
Run Code Online (Sandbox Code Playgroud)
当然,我需要重用相同的连接,因为page2.html的内容依赖于我在同一个HTTP会话中对page1.html的请求.
我也对使用netcat或wget的解决方案持开放态度,但不是PHP!
我在我的CodeIgniter应用程序中使用多个数据库,并且已经阅读了很多应该关闭持久连接的数据库.
为什么推荐这个措施,这在最新版本2.0.2中仍然是必要的吗?
我正在做的事情
$db2 = $this->load->database("dbname", TRUE);
Run Code Online (Sandbox Code Playgroud) php mysql codeigniter multiple-databases persistent-connection
这似乎是一个微不足道的问题,但仍然......我对此感到困惑.
几乎在每个站点我都读过HTTP持久连接或保持连接连接比非持久连接更好.问:那么,为什么非持久性甚至存在?
有人说,如果服务器为许多客户端提供服务,持久性有缺点,因为用户被剥夺了连接权.问:所有受欢迎的网站都服务于数百万客户端,这是否意味着他们不使用持久模式?
根据我的理解,我可以认为搜索引擎可能没有使用持久连接.
有人可以请教我这个话题.
我的另一个疑问是关于HTTP请求.我已经读过,如果一个页面包含指向多个对象的链接,那么Web浏览器会提取许多请求以获取所有这些(这就是使用持久连接的原因).我怀疑的是为什么所有对象都没有嵌入页面并作为一个对象发送?如果论点是它使页面变得重,而不是带宽友好,那么无论如何浏览器打开并行连接以获取多个对象,这再次将相同的负载放在网络上.
好的,我知道这不能用于图像搜索,但如果页面包含很少的对象,那么我们可以将它们嵌入页面并发送.
这些似乎是愚蠢的问题,但我无能为力.我有疑问,我需要清楚,你可以提供帮助.谢谢
我最近一直在努力解决HTTP超时问题.经过一个多月的调查,我很确定它是由错误的HTTP持久连接引起的.详情如下:
NSURLConnection.keep alivebug,但我的是另一个问题.更具体地说,该错误导致NSURLErrorNetworkConnectionLost但我的错误是NSURLErrorTimedOut.但是,我不确定我的问题是否是由iOS 8的另一个错误引起的.NSURLErrorTimedOut,并且所有跟随(不是太远离最后一个请求重用持久连接)请求会导致NSURLErrorTimedOut.NSURLErrorTimedOut.从解决方法中我们可以看到所有这些都有效,因为它们会导致丢弃坏的持久连接并创建新的持久连接.我的问题:
NSURLConnection不重用当前的持久连接,而是创建一个新的连接,这样我可以在我的代码中检测到它之后解决这个问题?我通过直接使用CFNetwork和控制Connection头文件成功地在iOS 8上缓解了这个问题.然而,在iOS 9上似乎问题变得更糟.
由于我希望Apple能够在iOS 9上修复它,我终于开了一个雷达:http://www.openradar.me/22770738.
如果你也遇到这个问题,请复制我的雷达,或者更好的是,如果你有一个更可靠的可重复样本,你可以发射你自己的雷达.
我已经玩了不同的memcached库和插件版本,以实现PHP memcache客户端和memcached服务器之间的真正持久性.
问题是仍然打开和关闭连接,以便连接计数器上升而不是重用现有的持久连接.
我已经在redhat机器上从最新源编译了memcached守护进程.我使用版本memcached-1.4.14并以"#/ opt/memcached/bin/memcached -vvvv"开头
我从最新的源代码版本memcached-2.0.1编译的php插件,我已经针对libmemcached-1.0.9编译它以使其保持最新.目前它不能针对libmemcached-1.0.10进行编译.
我的PHP脚本如下所示:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$key = "key_" . uniqid();
$memcached = new Memcached( 'persistent' );
$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
$memcached->setOption(Memcached::OPT_RECV_TIMEOUT, 1000);
$memcached->setOption(Memcached::OPT_SEND_TIMEOUT, 3000);
$memcached->setOption(Memcached::OPT_TCP_NODELAY, true);
$memcached->setOption(Memcached::OPT_PREFIX_KEY, 'persistent');
if( !count($memcached->getServerList() ) )
{
$memcached->addServer( 'localhost', 11211 );
}
$memcached->set($key, 'value');
$value = $memcached->get($key);
print_r( $memcached->getStats() );
?>
Run Code Online (Sandbox Code Playgroud)
在触发脚本时,我在输出中看到没有添加服务器,仅在超时期限之后.
Array ( [@?qVG:11211] => Array ( [pid] => 3728 [uptime] => 73 [threads] => 4 [time] => 1343813688 [pointer_size] => …Run Code Online (Sandbox Code Playgroud) 目前,我有一个客户端(组件)与服务器(另一个组件)有一个持久的 TCP 连接,并且消息是异步交换的。我想要一个负载均衡器(最好是 HAProxy),其中连接 b/w 客户端和负载均衡器以及 b/w 负载均衡器和多个服务器作为持久的 TCP 连接。
我知道可以轻松地为 TCP 负载平衡设置 HAProxy,但我想知道它是否支持开箱即用的持久连接。如果有人指出我正确的方向,那将会有很大帮助。谢谢。
http ×4
php ×3
keep-alive ×2
mysql ×2
bash ×1
codeigniter ×1
curl ×1
haproxy ×1
html ×1
ios ×1
java ×1
libmemcached ×1
memcached ×1
nginx ×1
performance ×1
persistent ×1
phpmailer ×1
smtp ×1
tcp ×1