Поддерживать пул исходящих 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) знал, когда завершился каждый запрос. Вы захотите выполнить явное "закрытие", как я показал, чтобы предотвратить ненужные открытые соединения с серверной частью.

Другие вопросы по тегам