我正在尝试用javascript预加载音频文件.我正在使用chrome,当我的文件的http请求长大的文件数被chrome取消时...为什么?我能做什么?这是我的代码:
filesToLoad = 44;
filesLoaded = 0;
for ( var ni = 1; ni < filesToLoad; ni++) {
console.log("start::: " + ServerPath + 'audio/' + ni + '.mp3');
loadAudio(ServerPath + 'audio/' + ni + '.mp3');
}
function loadAudio(uri) {
var audio = new Audio();
audio.addEventListener('canplaythrough', isAppLoaded, true); // It
audio.src = uri;
return audio;
}
function isAppLoaded() {
filesLoaded++;
if (filesLoaded >= filesToLoad) {
cb();
}
console.log("load::: " + ServerPath + 'audio/' + filesLoaded + '.mp3');
}
function cb() { …Run Code Online (Sandbox Code Playgroud) Django 1.6引入了持久连接功能.但是我注意到退出使用django的ORM的脚本至少留下了一些在db端打开的连接.
设置:django 6.0,postgres 9.2和psycopg2 2.5.1.
如何从脚本中优雅地关闭与数据库的连接?
该警告部分提到,Django的打开每个线程的连接,因此在多线程的脚本,并创造Django的每个线程的连接,即使不访问数据库的主题?
每个线程是否需要单独关闭数据库连接?
如果上述两个问题的答案都是肯定的,那么对于不在脚本退出时加入的守护程序线程(例如comm),你能做些什么呢?
django multithreading persistent-connection connection-close
我最近一直在探索Tornado Web框架,以便为许多不同的客户提供大量一致的连接.
我有一个请求处理程序,基本上采用RSA加密字符串并解密它.解密的文本是一个XML字符串,由我编写的SAX文档处理程序解析.一切都很好,执行时间(每个HTTP请求)大约是100毫秒(解密和解析).
XML包含用户的用户名和密码哈希.我想连接到MySQL服务器以验证用户名是否与应用程序提供的密码哈希相匹配.
当我基本上添加以下代码时:
conn = MySQLdb.connect (host = "192.168.1.12",
user = "<useraccount>",
passwd = "<Password>",
db = "<dbname>")
cursor = conn.cursor()
safe_username = MySQLdb.escape_string(XMLLoginMessage.username)
safe_pass_hash = MySQLdb.escape_string(XMLLoginMessage.pass_hash)
sql = "SELECT * FROM `mrad`.`users` WHERE `username` = '" + safe_username + "' AND `password` = '" + safe_pass_hash + "' LIMIT 1;"
cursor.execute(sql)
cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
执行HTTP请求所需的时间最多可达4-5秒!我相信这是在连接到MySql数据库服务器本身所花费的时间内产生的.
我的问题是如何加快速度?我可以在全局范围内声明MySQL连接并通过创建新游标在请求处理程序中访问它,还是因为Tornado的异步设计会遇到并发问题?
基本上,我怎么能不必每次Http请求都需要与MySQL服务器建立新的连接,所以它只需要几分之一秒而不是多秒来实现.
另请注意,SQL Server实际上与Tornado Web Server实例位于同一台物理计算机上
我只是通过一个分析器运行一个简单的MySQL查询,下面的代码相同.
以"connections.py"调用初始化函数把4.944秒单独执行.那似乎不对,是吗?
我认为使用一个连接(或者甚至一些具有非常简单的DB conn池)运行将足够快以处理我期望的每个龙卷风web服务器实例的吞吐量.
如果1,000个客户端需要访问查询,典型的查询时间在几千秒内,那么最不幸的客户端只需要等待一秒钟来检索数据.
我想将数据从客户端(桌面或移动)传输到托管服务器。它不是大量数据,每 1/10 秒 1 个字节 - 但数据需要立即流式传输(无缓冲)并且连接需要长时间保持活动状态(例如最多 10 分钟)。
因为服务器是托管的,所以我无法使用套接字 - 只能使用 http。
我知道在服务器端,如果我连接到客户端,我可以使用持久连接来做到这一点,只需写入响应流。
但是有没有办法反过来做到这一点,其中客户端与服务器有持久连接并正在写入请求流?
澄清:我不必将此客户端-> 服务器通信作为持久 http 连接完成,我只是想知道是否有可能,这样我就可以与我计划的服务器-> 客户端持久 http 连接对称。
据我所知,听起来我应该能够单独发布 http 帖子并实现相同或相似的延迟。
我无法确定什么是我的网络应用程序的最佳解决方案,即每次会话访问(主要是读取)多次相同的用户数据.
我应该在打开新会话时一次性检索所有用户数据(大约40个字段)到$ _SESSION,还是应该保持持久的PDO(mysql)连接,并在每次执行脚本时只查询数据库中需要的参数?
也:
在同一个事务中,一次读取/更新大量字段(自定义查询)或逐个(使用自定义查询的自定义组合)之间的性能会有很大差异吗?例如
$dbh = new PDO("mysql:host=localhost;dbname",$dbuser,$dbpass,array(PDO::ATTR_PERSISTENT => true));
$fieldlist='';
foreach ($fields as $i=>$field){
$fieldlist.=$field['name'].':field'.$i.',';
}
rtrim($fieldlist,',');
$dbh->prepare("UPDATE user SET ".$fieldlist." WHERE name=:name");
foreach ($fields as $i=>$field){
$stmt->bindValue(':field'.$i, $field['value'], PDO::PARAM_STR);
}
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$dbh = null;
Run Code Online (Sandbox Code Playgroud)
与
$dbh = new PDO("mysql:host=localhost;dbname",$dbuser,$dbpass,array(PDO::ATTR_PERSISTENT => true));
$dbh->beginTransaction();
foreach($fields as $field){
$stmt=$dbh->prepare("UPDATE user SET ".$field['name']."=:field WHERE name=:name");
$stmt->bindValue(':field', $field['value'], PDO::PARAM_STR);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
}
$dbh->commit();
$dbh = null;
Run Code Online (Sandbox Code Playgroud) 我正在处理性能问题,并且无法理解 Apache keep-alive 连接。我知道 Apache 能够为多个请求维护 TCP 连接,但我不知道客户端的代理如何影响该连接。我的公司通过代理汇集所有流量,以便我们的请求全部到达具有一系列 IP 地址之一的服务器。对于不同请求的多个用户来说,这些 IP 可能是相同的。
Apache 如何保持保持活动连接?是基于IP地址吗?
如果我的代理重复使用 IP 地址,当不同的客户端被分配相同的 IP 时,持久连接是否可以从客户端传递到客户端?
如果代理使用几十个 IP,它们是否都会保持持久连接并最终损害性能?
我希望有关于这个主题的文档可以查阅,但到目前为止我发现的所有内容都解释了保持活动连接试图做什么,而没有太多解释它们如何实现这些目标。
谢谢
在推送通知机制中,例如 Apple 的推送通知服务,它们使用持久的 IP 连接。
我的问题是,使用持久连接如何节省设备的电池和带宽?我的印象是,由于连接是持久的,因此设备始终使用 WiFi 或 3G/LTE 无线电。
我知道,通过持久连接,您不会因为在没有更改时不向服务器请求更改而浪费带宽,而是服务器会将这些更改“推送”给您。但是,我不知道这如何节省电池和带宽(因为您与服务器有始终在线的连接)。
类似的问题可以在这里找到:
Android C2DM 如何提高带宽使用率?
但我认为答案还不够。
battery push bandwidth push-notification persistent-connection
我\xe2\x80\x99m 调查一个带有实时仪表板(Angular Web 应用程序)的场景,该仪表板每 5 秒刷新一次(轮询)。该 API 位于 Azure 流量管理器后面,如果主要区域出现故障,该管理器将故障转移到第二个区域。请记住,Azure 流量管理器在 DNS 级别工作。
\n\n我面临的问题是,即使在流量管理器发生故障转移后,浏览器仍保持与主要区域的持久连接。请求最初失败并显示 503 秒,但随后继续失败并显示 502 秒。DNS 查找永远不会再次执行,因为请求发生的频率比保持活动超时的频率更高。这会导致浏览器继续向失败的区域发出请求。
\n\n有没有办法明确终止连接以强制进行 DNS 查找?到目前为止我发现的唯一方法是停止发出请求 2 分钟,或者关闭并重新打开浏览器。对于应该不受干扰且始终保持新鲜的仪表板来说,这两种解决方案都不是可接受的解决方案。
\n\n有趣的是,在让浏览器故障转移到次要区域后,如果我重新启动主要区域,浏览器将在大约一分钟后自动切换回主要区域。这告诉我,当服务正常运行时,连接会遵守 DNS TTL,但当服务器不可用时,则不会。这对我来说毫无意义,为什么浏览器会在找不到\xe2\x80\x99s 时永远锁定单个IP。
\n\n对于使用流量管理器为 Web 应用程序实施地理冗余故障转移,我是否缺少某些内容?在我看来,很奇怪的是,在任何情况下,用户都必须停止发出请求 2 分钟,然后浏览器才能将 IP 重新协商到故障转移的服务器。是否期望关闭保持活动以真正支持近乎即时的故障转移?
\n\n下面是描述此场景的图表:\n图表\n
当使用pg_pconnect连接从php连接到postgres时,pg_close:
以下内容来自 libcurl 主页:
从同一服务器传输多个文件时,curl 和 libcurl 对持久连接具有出色的支持。Curl 将尝试重用同一命令行/配置文件中指定的所有 URL 的连接,并且 libcurl 将重用使用同一 libcurl 句柄进行的所有传输的连接。
可以肯定的是,如果我创建一个 CURL 句柄 (curl_easy_init()) 并设置它的标头,发出 HTTP 请求,然后更改标头并发出另一个请求,libcurl 仍将尝试使用持久连接,即使标头具有改变了?
libcurl 主页还说
如果您使用 easy 接口,并且调用curl_easy_cleanup,则 libcurl 持有的所有可能打开的连接都将被关闭并被遗忘。
因此,只要我不调用curl_easy_cleanup,即使请求是使用不同的标头发出的,CURL 也会尝试重新使用相同的连接?
谢谢。
http ×2
keep-alive ×2
mysql ×2
php ×2
apache2 ×1
asp.net ×1
bandwidth ×1
battery ×1
c# ×1
django ×1
dns ×1
html5-audio ×1
http-request ×1
javascript ×1
libcurl ×1
pdo ×1
postgresql ×1
proxy ×1
push ×1
python ×1
time ×1
tornado ×1
transactions ×1