1

웹 개발과 멀티 스레드에 익숙하지 않고 몇 가지 개념에 대한 질문이 있습니다.Ruby on Rails : sleep 명령을 잘못 사용하고 있습니까? 멀티 스레딩

내 레일 앱에서 클라이언트는 양식을 통해 "작업"을 제출할 수 있습니다. 작업이 생성 될 때마다 "Dispatcher"모듈로 전달되며 추가 작업을 수행하기 전에 디스패처 모듈은 3 분 동안 대기해야합니다.

이렇게하기 위해 나는 단지 3 분 동안 수면을 실행하도록 제안했습니다.

제 파트너는 일자리를 만들 때마다 3 분간 앱을 정지시킬 것이므로이 아이디어는 좋지 않다고 말했습니다.

내 문제는 이것이 가능하지 않다는 것입니다. 클라이언트가 AWS 탄력적 인 beanstalk에서 호스팅되는 Google 앱에 연결할 때마다 EC2 서버가 클라이언트 요청을 처리하기 위해 새 스레드를 회전한다고 가정합니다. 클라이언트가 작업을 생성 할 때마다 응용 프로그램을 실행중인 HIS 스레드가 3 분 동안 잠자기 상태가됩니다. 3 분이 끝날 때까지 앱에서 아무 것도하지 않기를 원하기 때문에 문제가 될 수 없습니다.

내 개념이 올바른지 누군가 말해 줄 수 있습니까? 클라이언트가 요청을하는 방식, 서버가 처리하는 방식, HTML 및 자바 스크립트를 클라이언트로 다시 보내는 방식을 완전히 이해하고 싶습니다.

답변

2

이것은 ec2와는 아무런 관련이 없습니다. 대부분 EC2는 일반적인 서버 환경과 다르지 않습니다.

요청을 3 분 동안 유지하는 것은 좋지 않습니다. 많은 시나리오에서 cgi 프로세스에 요청을 전달하는 프런트 엔드 웹 서버가 있습니다. 이 경우 루비입니다. 30-60 초 내에 응답이 없으면 웹 서버는 종종 연결을 닫습니다. 시간 초과를 자주 늘릴 수는 있지만 열린 연결의 수에 따라 제한이 발생할 수 있습니다.

이 시나리오의 가장 좋은 해결책은 3 분 후에 처리 될 대기열에 지연된 메시지를 보내는 것입니다.

+0

EC2는 일반 서버처럼 실행됩니다. 그러나 정규 서버가 작동하는 방식이 아닌가? 클라이언트가 웹 서버를 통해 앱에 액세스하려고 할 때마다 웹 서버가 클라이언트 요청을 처리 할 새 스레드를 만들지 못합니까? – user2158382

+0

웹 서버에 따라 다른 스레딩 모델이 있지만 근본적으로 그렇게됩니다. 그러나 응용 프로그램이 웹 서버 서비스 자체 내에서 실행되지 않고 별도의 프로세스에서 실행되며 요청이 fcgi 프로토콜을 통해 웹 서버에서 전달됩니다. 또한 응용 프로그램 프로세스는 열린 연결을 처리 할 스레드를 만들어야합니다. 아무것도하지 않는 열린 스레드가 메모리를 사용하면 대기중인 모든 스레드를 보완하기 위해 스레드 한계를 더 높게 설정해야합니다. 당신이하고 싶은 일을 할 수는 있지만 이상한 문제가 생길 수 있습니다. – datasage

+0

아, 알겠습니다. 고맙습니다! – user2158382