问题标签 [keep-alive]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 通过http将数据从服务器推送到浏览器
在一般聊天应用程序中,客户端的浏览器总是轮询服务器以检查新消息。
然后我阅读了Nicholas Allen 关于在 IIS 中保持连接打开的博客。
这让我想到是否可以通过传输分块的 HTTP 将数据从我的服务器推送到客户端的浏览器(这意味着像流,对吗?)并保持连接打开。
在保持连接打开的同时,在服务器中,我有想法保持运行以检查新消息。像这样的东西,也许
这是一个原始的想法。
我在 ASP.net 中创建的聊天应用程序。由于我对 WCF 和高级 IIS 流模块的了解较少,我需要您的建议来实现这个想法。
是的,不可能是答案。但我需要知道为什么如果它仍然不可能。
更新(3年后):
这正是我一直在寻找的: Microsoft ASP.NET SignalR
php - 通过 Soap 请求的 KeepAlive 数据包
我一直在调试我们在同一 VLAN 上的两台服务器之间发出的一些 Soap 请求。一台服务器上的应用程序是用 PHP 编写的,另一台服务器上的应用程序是用 Java 编写的。我可以控制和更改 PHP 代码,但不能影响 Java 服务器。PHP 应用程序使用 DOMDocument 对象形成 XML,然后使用 cURL 扩展发送请求。
当soap请求的完成时间超过5分钟时,它会一直等到最大超时限制并退出,并显示如下消息:
900000 毫秒后操作超时,收到 0 个字节
在嗅探正在发送的数据包后,事实证明问题是由网络中的 5 分钟超时引起的,该超时正在关闭它认为是陈旧的连接。有两种方法可以修复它:增加 iptables 中的超时时间,或者开始通过请求发送 KeepAlive 数据包。
为了彻底,我想实施这两种解决方案。提高超时时间对操作来说很容易,但发送 KeepAlive 数据包却变得很困难。cURL 库本身支持这一点(请参阅 CLI 应用程序的--keepalive-time标志),但似乎PHP cURL 库中没有实现这一点。我什至检查了源代码以确保它不是未记录的功能。
所以我的问题是:我怎么能把这些数据包发送出去?我看到了一些明确的选项,但我不喜欢其中任何一个:
- 编写一个包装器,它将通过shell_exec启动 CLI 应用程序的请求。这是一个我不喜欢的 hack
- 更新 cURL 扩展以支持这一点。根据 Ops,这是一个不可选项。
- 自己打开插座。我知道就够危险了。我也没有看到用 fsockopen 做到这一点的方法,但我可能会遗漏一些东西。
- 切换到另一个库。支持这一点的存在是什么?
谢谢你尽你所能的帮助。
java - 为多个 Web 服务请求保持连接打开
我会对网络服务有疑问。假设我有必须在高负载下执行的 Web 服务客户端。而且我不能使用其他技术。
是否有可能以某种方式为所有请求保持连接打开,以避免在建立新的 tcp/ip 连接时产生开销?在托管环境的情况下,是否有可能像 jdbc 连接或 JCA 那样拥有一种池化 Web 服务连接?
我目前正在使用由 sun 的 wsimport 生成的存根,并且看不到如何保持连接打开的任何可能性。
感谢您的评论
javascript - 在闲置数小时后保持 ajax 网页正常运行
我有一个单页网络应用程序,所以没有页面刷新。有时我让页面在一夜之间打开,然后我早上回来并再次开始与它交互。通常我发现我必须刷新。Javascript 执行不正确 - 就地编辑加载奇怪的数据,ajax 调用不触发......这与后端无关,似乎只是浏览器转储它的内存,或其他东西。不涉及任何会话。
Google 日历如何保持打开 3 天并且仍然触发事件警报?
我有一个每 5 秒触发一次的“保持活动”呼叫,试图让浏览器保持警觉,但它没有帮助。有什么诀窍?有没有办法告诉浏览器将所有内容永久保存在内存中?
(我确信这在网络上的许多地方都有解决,但我不知道要搜索什么。)
postgresql - 如何在 Postgresql 中使用 tcp_keepalives 设置?
Postgresql 有 3 个用于管理断开连接的 keepalive 设置(在 postgresql.conf 中):
tcp_keepalives_count
tcp_keepalives_idle
tcp_keepalives_interval
默认情况下,这些为 0。
我想要的行为是让 Postgresql 在一段时间后断开客户端连接,如果客户端失去其网络连接或进入睡眠状态。
我目前正在使用这些值:
tcp_keepalives_count = 1
tcp_keepalives_idle = 60
tcp_keepalives_interval = 60
我在 Mac OS X 上运行 PostgreSQL 8.4,但它似乎没有任何效果。我的测试是我锁定表中的一行(使用 SELECT FOR UPDATE)并断开工作站与网络的连接。但是在 Postgresql 中,我仍然看到那个工作站持有锁。
我希望在时间过去后(在这种情况下为 60 秒),连接将被终止并且锁将被释放。
要么我做错了什么,要么我完全误解了这应该如何工作。
有什么建议吗?
python - 具有保持活动状态的 Python 流式 http 客户端
我需要一个 python http 客户端,它可以重用连接并支持在流进来时使用它。它将用于解析 xml 流,sax 样式。
我想出了一个解决方案,但我不确定它是不是最好的(有很多方法可以在 python 中编写 http 客户端)
谢谢各位!
c# - 如何在 ASP.NET Web 服务客户端请求上禁用 keep-alive?
我在 Amazon EC2 负载均衡器后面有一些 Web 服务器。我在端口 80 上使用 TCP 平衡(而不是 HTTP 平衡)。
我有一个客户端每隔几秒钟轮询一次 Web 服务(在所有 Web 服务器上运行)以获取新项目。但是,客户端似乎与一台服务器保持连接,并且每次都轮询同一台服务器。
我尝试使用 ServicePointManager 禁用 KeepAlive,但这并没有改变任何东西。传出连接仍然有它的“connection: keep-alive”HTTP 标头,并且服务器保持 TCP 连接打开。我还尝试将 GetWebRequest 覆盖添加到由 VS 创建的代理类中,该代理类继承自 SoapHttpClientProtocol,但我仍然看到 keep-alive 标头。
如果我终止客户端的进程并重新启动,它将通过负载平衡器连接到新服务器,但它将永远继续轮询该新服务器。
有没有办法强制它每次都连接到随机服务器?我希望一个客户端的负载分布在所有 Web 服务器上。
客户端是用 C# 编写的(服务器也是如此),并使用指向负载均衡器的 Web 引用(不是服务引用)。
http - 长期 HTTP 会话保持活动(非持久 HTTP)
在工作中,我们有一个客户端-服务器系统,客户端通过 HTTP 向 Web 服务器提交请求。服务器端处理有时会超过60秒,这是我们公司IT人员设置的代理超时值,无法更改。有没有办法通过来自服务器或客户端的心跳消息使 HTTP 连接保持活动超过 60 秒(最好是任意长的时间段)?
我知道有 HTTP 1.1 持久连接,但这不是我想要的。
HTTP 是否具有保持活动功能,或者这是否必须通过某种套接字选项在 TCP 级别完成?
jsf - Richfaces 模态面板和 a4j:keepAlive
我在 Richfaces (3.3.2) 模式面板上遇到了意想不到的问题。当我尝试打开它时,浏览器会打开两个面板而不是一个:一个在中心,另一个在左上角。此外,不会发生褪色。我也有三种模式:查看、编辑、新建 - 当我打开我的面板时,它应该在标题中显示“创建新...”或“编辑...”,实际上它显示但不在标题中作为后者虽然应该渲染,但根本没有渲染,因为我在打开此模式面板之前设置了正确的模式。此外,它在我制作的所有其他页面上都可以正常工作,并且我的应用程序中有数十个这样的页面。我不明白这里有什么问题。修复它的唯一方法是从非常奇怪的页面中删除 <a4j:keepAlive/> ,恕我直言。
我不确定代码在这里是否有用,因为它在我的应用程序中的任何地方都可以正常工作,但这是唯一的情况。所以如果你把它放在你的页面上,它可能会毫无问题地工作。我唯一的问题是:这两个元素(<rich:modalPanel> 和 <a4j:keepAlive>)的交互是否存在任何隐藏或罕见的问题?或者我应该再花两三天在我的代码中寻找一些错误的逗号、括号或其他东西吗?:)
对于大多数好奇。面板本身:
打开面板的按钮之一:
单击按钮时调用的操作:
模式检查:
apache - 我可以从 C 模块内部强制关闭 Apache 2.2 连接吗?
我们希望对我们在 C++ Apache 2.2 模块(在 CentOS 5 上)中提供的连接进行更细粒度的控制。
其中一个连接需要在多个请求中保持活动状态,因此我们将“KeepAlive”设置为“On”并设置较短的保持活动时间。
但是对于每一个这样的连接,我们都有来自浏览器的更多连接,我们不需要留下这些连接,而是希望在单个请求后强制它们关闭。
其中一些连接在不同的端口上(因此我们可以通过端口区分它们,因为可以为每个虚拟主机设置 KeepAlive)和一些请求不同的 URL(因此我们可以从路径和参数中看出我们不想离开他们在后面)。
同样对于我们确实想要保持活力的那个,我们知道在某个请求之后我们也想关闭它。
但到目前为止,我们发现“取消”保持活动的唯一方法是向客户端发送礼貌的“连接:关闭”标头。如果客户表现不佳或恶意,那么他们可以保持开放并浪费我们的资源。
有没有办法告诉 Apache 从服务器端关闭连接?该文档建议不要对套接字进行简单的 close(2) 调用,因为 Apache 需要在完成之前进行一些清理。但是是否有一些 API 或技巧可以动态地“覆盖”静态的“KeepAlive On”配置(并说服 Apache 调用 close(2))?
谢谢。