그게 내게 크게 CGI을 생각 나게합니다.
귀하의 아이디어는 모두 올바른 방향으로 들립니다. 쉘 스크립트와 웹 서버와의 잠재적 인 상호 작용을 고려할 때, 오래 전에 흔히 볼 수 있었던 이런 종류의 코드 예제를 어디에서 파헤 치는지 지적하는 것이 타당합니다. 경향이있다.
실제로 스크립트는 일반적인 작업을 수행하는 CGI 스크립트입니다.
인터넷의 초기 며칠 동안은 정적 파일 (HTML 또는 기타)이 아닌 웹 페이지를 구현하는 "정상적인 방법"이었습니다. 페이지는 기본적으로 쉘 스크립트 (또는 stdin에서 읽고 stdout에 쓰는 다른 프로그램)로 구현됩니다.
당신이하고있는 일/제안은 매우 유사하며, 오래된 CGI 코드에서 배우는 데 유용한 교훈이 있다고 생각합니다.
예를 들어, sdtout을 통해 스크립트 내부에서 바로 버퍼링하는 것은 웹 서버를 통해 클라이언트의 페이지에 까다로울 수 있습니다. 오래된 예제를 파헤쳐 보면 많은 도움이 될 수 있습니다.
버퍼링 될 것입니다 일반적으로
까다로운 부분 (이것의 대부분은 당신에게 분명있을 수 있습니다, 영업 이익은 개인적으로, 그래서 "당신"잠재적 인 독자 등을), 나는 기대한다. 쉘에서 stdin/out 버퍼를 명시 적으로 처리하는 데 익숙하다면, 지원하지 않는 프로그램의 경우 상상할 수있는 것들을 상상할 수 있습니다. 그러나 익숙하지 않은 경우 : CGI가 더 나 빠졌다는 것을 기억합니다. HTTP 서버의 버퍼링도 자동으로 처리됩니다 (자동으로 처리되기를 바랍니다) - 질문을하기 시작하거나 예제를 일찍 찾아보십시오.
CGI 스타일 방식은 사용자가 지금 구현 한 것과 정확히 일치 할 수 있으며 버퍼링은 맞습니다. 이는 얻을 수있는만큼 실시간이어야합니다. 하지만 긴 런타임 때문에 시간 초과가 발생하는 것을 알고 있습니까? 아니면 강하게 변하는 런타임이 있습니까?
가능한 한 실시간으로 표시하기 위해 http 스트림에 stdout을 쓰는 것보다 더 좋은 방법은 없습니다.
(우리는 HTTP 서버를 통과하는 오버 헤드를 수용한다고 가정합니다.) 또한, 모든 버퍼를 플러시하지 않도록 라인 버퍼링을 고려하고 있습니다 - 유스 케이스에 충분합니까? (즉, 애니메이션 진행 표시기 선/ANSI 이스케이프는 실시간으로보고 싶지 않음)
그런 다음 시간 초과와 같은 문제를 해결하는 것이 가장 좋지만 개념을 유지하는 것이 좋습니다. 실시간이 그다지 중요하지 않다면 물론 다른 방법으로 여러면에서 더 나아질 수 있습니다. 한 가지 점은 확장 성을 위해 다른 방법이 필요할 수 있다는 것입니다.
어떤 방식 으로든 확장해야합니까? 병렬로 한 사용자가 사용하는 것처럼 1000이 아닐까요? –
루아와 어떤 관련이 있습니까? – lhf
Luvit을 사용하고 있으며 가능한 경우 순수 루아 솔루션을 원합니다. 현재 루아 웹 소켓 구현을보고 있습니다. – Sam