저는 리눅스에서 C로 'wrapper'데몬을 작성하고있는 작은 취미 프로젝트를 가지고 있습니다. 즉, 목적은 시작하고, 모니터하고, 명령을 실행하는 것입니다. 다른 프로그램을 중지하십시오. 데몬은 또한 사용자가 로그인하여 실행중인 프로그램을 조작 할 수있는 웹 인터페이스를 제공합니다.wrapper-daemon 랩핑 된 프로그램 출력 처리
프로그램을 stdout에 쓸 때마다이 출력이 파이프로 리디렉션됩니다. 누군가 웹 인터페이스를 통해 프로그램에 접근 할 때마다 웹 인터페이스는 XMLHttpRequest()를 통해 데몬을 폴링하기 시작하고 데몬은 파이프에 무엇인가가 기록되어 있는지 확인한 다음 시각.
두 명의 (또는 그 이상) 사용자가 로그인하여 동일한 프로그램과 상호 작용할 때 주된 문제가 있습니다. 웹 인터페이스는 효과적으로 파이프를 작성하여 폴링하므로 여러 사용자가 로그인하여 동일한 프로그램을 모니터링 할 때마다 해당 프로그램의 출력이 사용자 중 한 명에게 임의로 전송됩니다. 이것은 분명히 나쁘다.
내가 지금 생각하고있는이 문제를 해결할 수있는 한 가지 해결책은 프로그램에서 생성 한 모든 출력에 타임 스탬프를 지정하고 데이터베이스와 같은 정보에이 정보를 저장하는 것입니다. 그런 다음 웹 인터페이스가 시간 소인으로 디먼을 폴링하면, 디먼은 이후 작성된 모든 출력을 수집하고이를 다시 송신합니다.
위의 해결 방법이 다중 사용자 문제를 해결할 것이라고 생각하지만이 문제에 대해 스택 오버플로 커뮤니티에 쿼리를 걸면 좋을 것이라고 생각했습니다. 이런 문제에 대한 더 나은 해결책이 있습니까? (나는 다소 이해할 수있는 방식으로 문제를 설명했다.)
사용자 별 스트림을 살펴 보겠습니다. 입력 해 주셔서 감사합니다. – jimka