相关疑难解决方法(0)

了解ColdFusion中的持久HTTP连接

结论:我试图了解ColdFusion是否能够通过CFHTTP标签在单个请求之外使用持久性http连接.这篇文章的一部分是"我发现/尝试了什么".

我的系统:CF10 IIS7.5 Windows 7

我目前正在通过HTTP Rest接口连接到ElasticSearch,该接口将具有大量的cfhttp调用.在这种情况下,ColdFusion是Client,ElasticSearch是服务器.按照建议,我传递了keep-alive标头以及cfhttp请求,但发现CFHTTP似乎总是在它之后添加一个关闭,从而产生这个标头:

<!--- Calling tag --->
<cfhttp url="loc.mysite.com?endpoint" 
    method="POST"
    result="ret">
<cfhttpparam type="HEADER" name="Keep-Alive" value="300">
<cfhttpparam type="HEADER" name="Connection" value="keep-alive">
<cfhttpparam type="xml" value="#body#" />
</cfhttp>
<!--- Results in this  header. (dumping getHTTPrequestdata() on a dummy page) --->
connection: keep-alive,closed
Run Code Online (Sandbox Code Playgroud)

首先,我无法弄清楚如何防止发生关闭.

其次,我无法弄清楚ColdFusion是否会重复使用该连接,即使它是在同一请求期间或在此请求之外没有关闭的情况下发送的.显然,这与Java在这一点上与OS的交互方式有关.最初,我认为它将由ColdFusion的魔力处理,但我开始认为它没有使用任何花哨的Java池魔法.

第三,我在ColdFusion中找不到关于http连接池的任何文档.它确实有数据库连接池,但http池可能是一个相对较新的要求.

第四,我发现CFX_http5仍然在使用Tomcat的ColdFusion 10中工作(有什么机会).虽然它擅长多线程请求,但很少提及如何使用keep-alive.没有购买,我无法在循环内测试它.它不会添加关闭标头.它像我期望的那样保持活着.

第六次(自首次发布以来编辑很多)第六,Windows有一个默认数量的临时或"短暂"端口,它可以利用它来产生新的出站TCP连接.默认情况下,一旦打开一个连接,Windows将使其保持活动状态两分钟(尽管它刚刚被放弃并占用了空间).这是一个TCP配置,因此http标头不会直接在这里播放.可用端口的默认数量为5,000个,减少1024个= 3076个端口.这意味着一个盒子上的所有ColdFusion实例在任何给定的两分钟窗口中最多可以产生3076个http请求,而不会在可用的连接端口上等待.如果太多请求被淹没(我不知道在什么时候),您将收到"连接已关闭"错误.这让我想起原始级别的垃圾收集.所以,

更新:CFX_HTTP5确实支持单个ColdFusion请求中预期的保持活动和持久连接.我的ElasticSearch端点的150K查询测试先前在15分钟内完成.使用CFX_HTTP5,它在4分钟内运行.此外,我能够将注册表切换回默认端口数.下一步是弄清楚HTTPComponents是否有效.我有这个几乎工作.

更新2 ::使用下面建议的HTTP组件构建自定义http调用.我使用了默认设置的基本连接池管理器.我还没试过调整它.这个过程在5分钟内结束,比cfx_http5慢一点,但仍然比cfhttp快很多.另外,我还没有完成涉及多个ColdFusion请求的测试来真正测试连接池.

更新3:我确认HTTPComponents确实正在建立一个合适的连接池.但是,由此有责任正确管理这些连接和池本身,以确保它是系统资源的良好管理者.我能够从几个不同的同时请求中运行数百万个HTTP请求,同时只打开少量的HTTP连接.从日志中,我能够看到有多少连接正在使用,空闲或旋转.这真的不是那么多代码,项目背后的人都有很棒的文档.

HTTPComponents Connection Pool:
Single request, unlimited CFHTTP to same connection = single open TCP connection
N-requests = <N open TCP connections. 

CFHTTP
N-CFHTTP calls …
Run Code Online (Sandbox Code Playgroud)

coldfusion http

7
推荐指数
1
解决办法
1866
查看次数

标签 统计

coldfusion ×1

http ×1