Поддерживать пул исходящих TCP-соединений в ColdFusion
Я рассчитываю на интенсивное использование RESTful API из приложения ColdFusion.
Я не эксперт по CF, но я ожидаю, что повторные вызовы cfhttp станут узким местом, поскольку я считаю, что каждое из них приводит к установлению соединения, отправке запроса, получению ответа и разрыву соединения.
Мне любопытно - есть ли способ поддерживать пул соединений, через который могут отправляться запросы, чтобы избежать повторного установления / разрыва соединения?
Предоставляет ли сервер ColdFusion такое средство, о котором я просто не знаю (мы используем CF 8), или я могу написать пользовательский тег Java, который может поддерживать пул?
Конечно, кто-то еще сталкивался с этим.
2 ответа
К сожалению, я думаю, что ответ "нет", особенно из-за ваших требований. Это просто не то, как работает REST; и ограничение является стороной API, а не проблемой ColdFusion.
Вы могли бы сделать что-то подобное, предполагая, что у вас тоже есть контроль над API, но это не будет REST.
Я думаю, что вы могли бы сделать это, используя заголовок запроса "Keep-Alive" со своими вызовами cfhttp. Например:
<cfloop from="1" to="50" index="i">
<cfhttp url="http://mysite.com/getPage.cfm?i=#i#" method="get">
<cfif i LT 50>
<CFHTTPPARAM type="HEADER" name="Connection" value="Keep-Alive">
<cfelse>
<CFHTTPPARAM type="HEADER" name="Connection" value="close">
</cfif>
</cfhttp>
<cfdump var="#cfhttp.filecontent#">
</cfloop>
Я не проверял это, но теоретически он должен держать соединение с бэкэндом открытым, пока вы выполняете каждый из этих запросов (при условии, что бэкэнд учитывает это, а задержка между соединениями не вызвала тайм-аут). Вы должны быть уверены, что ваш ответ API содержит заголовок "Content-length", чтобы клиент (ваш код cfhttp) знал, когда завершился каждый запрос. Вы захотите выполнить явное "закрытие", как я показал, чтобы предотвратить ненужные открытые соединения с серверной частью.