标签: persistent-connection

http请求在javascript html5音频预加载时被取消

我正在尝试用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)

javascript http persistent-connection html5-audio

6
推荐指数
1
解决办法
1109
查看次数

在多线程脚本中使用django的持久连接关闭数据库连接

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

6
推荐指数
2
解决办法
2928
查看次数

Tornado Web框架Mysql连接处理

我最近一直在探索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秒单独执行.那似乎不对,是吗?

更新2

我认为使用一个连接(或者甚至一些具有非常简单的DB conn池)运行将足够快以处理我期望的每个龙卷风web服务器实例的吞吐量.

如果1,000个客户端需要访问查询,典型的查询时间在几千秒内,那么最不幸的客户端只需要等待一秒钟来检索数据.

python mysql time tornado persistent-connection

5
推荐指数
1
解决办法
3666
查看次数

是否可以通过 http 将数据从客户端传输到服务器?

我想将数据从客户端(桌面或移动)传输到托管服务器。它不是大量数据,每 1/10 秒 1 个字节 - 但数据需要立即流式传输(无缓冲)并且连接需要长时间保持活动状态(例如最多 10 分钟)。

因为服务器是托管的,所以我无法使用套接字 - 只能使用 http。

我知道在服务器端,如果我连接到客户端,我可以使用持久连接来做到这一点,只需写入响应流。

但是有没有办法反过来做到这一点,其中客户端与服务器有持久连接并正在写入请求流?

澄清:我不必将此客户端-> 服务器通信作为持久 http 连接完成,我只是想知道是否有可能,这样我就可以与我计划的服务器-> 客户端持久 http 连接对称。

据我所知,听起来我应该能够单独发布 http 帖子并实现相同或相似的延迟。

c# asp.net http persistent-connection

5
推荐指数
1
解决办法
2802
查看次数

mysql pdo事务和会话存储

我无法确定什么是我的网络应用程序的最佳解决方案,即每次会话访问(主要是读取)多次相同的用户数据.

我应该在打开新会话时一次性检索所有用户数据(大约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)

php mysql pdo transactions persistent-connection

5
推荐指数
1
解决办法
618
查看次数

Apache 如何处理同一代理上多个客户端的保持活动连接?

我正在处理性能问题,并且无法理解 Apache keep-alive 连接。我知道 Apache 能够为多个请求维护 TCP 连接,但我不知道客户端的代理如何影响该连接。我的公司通过代理汇集所有流量,以便我们的请求全部到达具有一系列 IP 地址之一的服务器。对于不同请求的多个用户来说,这些 IP 可能是相同的。

Apache 如何保持保持活动连接?是基于IP地址吗?

如果我的代理重复使用 IP 地址,当不同的客户端被分配相同的 IP 时,持久连接是否可以从客户端传递到客户端?

如果代理使用几十个 IP,它们是否都会保持持久连接并最终损害性能?

我希望有关于这个主题的文档可以查阅,但到目前为止我发现的所有内容都解释了保持活动连接试图做什么,而没有太多解释它们如何实现这些目标。

谢谢

proxy apache2 keep-alive persistent-connection

5
推荐指数
0
解决办法
627
查看次数

持续的 tcp/ip 连接如何节省电池并降低带宽使用率?

在推送通知机制中,例如 Apple 的推送通知服务,它们使用持久的 IP 连接。

我的问题是,使用持久连接如何节省设备的电池和带宽?我的印象是,由于连接是持久的,因此设备始终使用 WiFi 或 3G/LTE 无线电。

我知道,通过持久连接,您不会因为在没有更改时不向服务器请求更改而浪费带宽,而是服务器会将这些更改“推送”给您。但是,我不知道这如何节省电池和带宽(因为您与服务器有始终在线的连接)。

类似的问题可以在这里找到:
Android C2DM 如何提高带宽使用率?
但我认为答案还不够。

battery push bandwidth push-notification persistent-connection

5
推荐指数
1
解决办法
3008
查看次数

浏览器无法在持续连接上重新协商 DNS

我\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在此输入图像描述

\n

dns keep-alive persistent-connection azure-traffic-manager

5
推荐指数
1
解决办法
359
查看次数

使用持久性postgres连接时pg_close?

当使用pg_pconnect连接从php连接到postgres时,pg_close:

  1. 真的关闭连接(毁了持久效果)?
  2. 将连接交给pconnect池?

php postgresql persistent-connection

4
推荐指数
1
解决办法
1810
查看次数

与 libcurl 的持久连接

以下内容来自 libcurl 主页:

从同一服务器传输多个文件时,curl 和 libcurl 对持久连接具有出色的支持。Curl 将尝试重用同一命令行/配置文件中指定的所有 URL 的连接,并且 libcurl 将重用使用同一 libcurl 句柄进行的所有传输的连接。

可以肯定的是,如果我创建一个 CURL 句柄 (curl_easy_init()) 并设置它的标头,发出 HTTP 请求,然后更改标头并发出另一个请求,libcurl 仍将尝试使用持久连接,即使标头具有改变了?

libcurl 主页还说

如果您使用 easy 接口,并且调用curl_easy_cleanup,则 libcurl 持有的所有可能打开的连接都将被关闭并被遗忘。

因此,只要我不调用curl_easy_cleanup,即使请求是使用不同的标头发出的,CURL 也会尝试重新使用相同的连接?

谢谢。

libcurl persistent-connection http-request

4
推荐指数
1
解决办法
5585
查看次数