데스크톱 C++ 응용 프로그램을 웹 응용 프로그램으로 변환하는 방법에 대한 조언이 필요합니다. (이것은 내 첫 번째 웹 응용 프로그램입니다.) 데스크탑 응용 프로그램에는 현재 C# GUI가 있지만 모든 기능을 사용하려면 관리되지 않는 비 스레드 안전 C++ DLL에 있어야합니다.Ruby에서 사용할 관리되지 않는 C++ DLL을 적용하는 방법
web-app는 Rails를 사용하며 Linux 서버에서 실행됩니다. 대부분의 경우 문자열 목록을 DLL에 전달하고 대신 winnowed-down 목록을 가져와야합니다. DLL은 Windows 서버에서 실행해야합니다. 상당한로드 시간이 있기 때문에 지속적으로 실행하고 싶습니다. 또한 동시 요청을 적시에 처리하기 위해 여러 인스턴스가 필요할 것입니다. 합리적으로 잘 확장 할 필요가 있습니다. (관련이있는 경우 : Windows 서버는 Amazon Web Services에 있습니다.)
따라서 저는 (1) Ruby와 C++ 간의 상호 작용 방법 및 (2) 동시 요청 관리 방법을 결정해야합니다. C++
내가 루비 확장을 사용할 수에
루비 루비에서 라이브러리를 호출하는 (아마도 꿀꺽 꿀꺽 또는 Rb는 함께 + +를보다 쉽게하기 위해). 하지만 별도의 서버에서 실행될 때의 옵션입니까?
관계없이 상대적으로 단순한 상호 작용으로 인해 HTTP 요청 만 수행하면됩니다. 권리?
내가 읽은 바로는 FastCGI가 최선의 방법이라고 생각합니다. FastCGI 인터페이스가있는 프로세스에서 DLL을 래핑하면됩니다. 고려해야 할 다른 옵션이 있습니까?
여러 프로세스
우선 명확히해야 다음 C++ DLL이 스레드 안전하지 않습니다. 그래서 구성 가능한 수의 프로세스를 생성하고 유휴 프로세스로 요청을 라우트 (또는 유휴 상태가 될 때까지 대기열에서 대기)하도록 서버가 필요합니다.
정확하게 이해했다면 FastCGI in general supports this 및 IIS in particular does too입니다. (분명히 IIS는 멀티 스레드 FastCGI 응용 프로그램을 지원하지 않지만 나에게 좋습니다.)
FastCGI 프로세스 관리자를 구성하는 데 문제가 있습니까?
방금 더 명확하게 제 질문을 편집했습니다 : 내 DLL은 threadsafe가 아니므로 (threadsafe가 중요하지 않음). 내가 읽고있는 ISAPI는 스레드 안전성이 필요합니다. 위에서 언급 한 "다중 단일 스레드 프로세스"옵션은 없습니다. http://lyngtinh.blogspot.com/2011/07/difference-between-cgi-isapi-and.html (편집 : 아빠, 너무 빨리 입력하십시오.) 소스가 있습니다. 너는 무엇을 염두에 두 었는가? 큰 규모의 복잡한 라이브러리입니다. 리소스 제한으로 새로운 코드는 실제로 옵션이 아닙니다. – Jugulum
"your ISAPI DLL plugin"수준에서 DLL을 스레드 관련 메모리에서 실행하여 스레드 안전을 강화하십시오. 또는 IIS를 제어 할 수있는 C++ HTTP 서버로 대체하거나 패치합니다. – Phlip
IIS에서 ISAPI DLL, 라우팅 및 큐 요청의 여러 복사본을 생성 할 수 있다고 말하는가? 그렇다면, 나는 그것을 조사 할 것이다. 어떤 식 으로든 FastCGI보다 나은가요? – Jugulum