죄송합니다. 게시물이 길어서 구체적이지 않으려 고 노력하고 있습니다. 차가운 융합과 lucee에서 약간의 newb입니다. 그래서 여기에 근본적인 것을 놓친다면 저를 용서해주십시오. 나는 단지 빠른 POC를하려하지만, 작동시키지 못한다.
내가하려는 것은 페이지 호출을 만들고, 웹 페이지에 쓰고 잠시 동안 잠을 자려고하는 것입니다. 하트 비트의 종류. 모든 일이 일어나고 페이지 cfm 파일이 처리를 완료 할 때까지 웹 페이지에 쓰기 만하면됩니다. 나는 지난 2 일 동안 광범위하게 보았고 수많은 항목을 시도했지만 아무 소용이 없습니다.
내 index.cfm lucee 페이지에서 새 탭을 실행하고 내 cfm 파일을 호출하는 링크가 있습니다.
<a href="./pinger2.cfm" target="_blank"><img class="ploverride" src="/assets/img/Ping.png" alt="Ping Test" width="125" height="75">
여기서 아무런 문제가 없으며 새 탭이 열리고 pinger2.cfm이 처리를 시작합니다. 내가 바라는 부분은 테이블에 거의 즉시 인쇄하여 첫 번째 호출을 출력하고, 결과를 페이지에 인쇄하고, 잠자기하고, 다음 호출을 만들어 페이지로 인쇄하는 것입니다. 걱정 마라. 누구나 단서가 있습니까? 내가 거기에있는 다른 "적은 최고의보다"사례가 확실 해요,하지만 난 그냥이 신속하고 더러운 할 노력하고있어 :cfscript 안에있는 동안 웹 페이지로 어떻게 출력합니까?
<cfscript>
public struct function pinger(required string url, required string verb, required numeric timeout, struct body)
{
var result = {
success = false,
errorMessage = ""
};
var httpService = new http();
httpService.setMethod(arguments.verb);
httpService.setUrl(arguments.url);
httpService.setTimeout(arguments.timeout);
if(arguments.verb == "post" || arguments.verb == "put")
{
httpService.addParam(type="body", value=SerializeJSON(arguments.body));
}
try {
callStart = getTickCount();
var resultObject = httpService.send().getPrefix();
callEnd = getTickCount();
callLength = (callEnd-callStart)/1000;
if(isDefined("resultObject.status_code") && resultObject.status_code == 200)
{
result.success = true;
logMessage = "Pinger took " & toString(callLength) & " seconds.";
outLine = "<tr><td>" & resultObject.charset & "</td><td>" & resultObject.http_version & "</td><td>" & resultObject.mimetype & "</td><td>" & resultObject.status_code & "</td><td>" & resultObject.status_text & "</td><td>" & resultObject.statuscode & "</td><td>" & logMessage & "</td></tr>";
writeOutput(outLine);
getPageContext().getOut().flush();
return result;
}
else
{
throw("Status Code returned " & resultObject.status_code);
}
}
catch(Any e) {
// something went wrong with the request
writeDump(e);
abort;
}
}
outLine = "<table><tr><th>charset</th> <th>http_version</th> <th>mimetype</th> <th>status_code</th> <th>status_text</th> <th>statuscode</th> <th>time</th> </tr>";
writeOutput(outLine);
getPageContext().getOut().flush();
intCounter = 0;
while(intCounter LT 2)
{
theResponse = pinger(
url = "https://www.google.com",
verb = "GET",
timeout = 5
);
intCounter = intCounter + 1;
getPageContext().getOut().flush();
sleep(2000);
}
outLine = "</table>";
writeOutput(outLine);
</cfscript>
참고 : pinger2.cfm 파일의 코드입니다.
나는 getPageContext().getOut().flush();
이 트릭을 할 것이라고 생각했지만 아무런 부에노가 아니 었습니다.
편집 : 중요한 경우 CF 버전 10,0,0,0 및 Lucee 버전 4.5.2.018을 사용하고 있습니다.
버퍼의 내용을 출력 스트림으로 플러시하려면'flush; '일 뿐인'cfflush'의 cfscript 버전을 호출 할 수 있어야합니다. – andrewdixon
또한 cfscript 버전의 cfscript 버전을 사용할 수 있습니다. 'cfhttp', 예. 'http url = "..."method = "...";, 등등 ... 그러나 그것은 Lucee와 ACF와는 다르다. – andrewdixon
나는 그것을 또한 시도했다, 그것은 작동하지 않았다. 나는 또한 플러시; 플러시; (머리글과 본문)하지만 작동하지 않습니다. – RoryLatham