2013-11-20 2 views
1

데스크톱 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 thisIIS in particular does too입니다. (분명히 IIS는 멀티 스레드 FastCGI 응용 프로그램을 지원하지 않지만 나에게 좋습니다.)

FastCGI 프로세스 관리자를 구성하는 데 문제가 있습니까?

답변

0

IIS 용 ISAPI를 찾은 다음 레일즈 -> '인터넷 -> Windows 서버 -> IIS -> ISAPI -> ISAPI DLL 플러그인 -> HTTP webservice ->이 DLL로 이동하십시오.

하지만 뛰어 내리는 많은 농구의 지옥입니다. DLL에 대한 소스가 없습니까?

그렇지 않으면이 DLL을 호출하는 Windows 테스트 스크립트를 작성합니다. 그런 다음 모든 행동을 다 다루는 테스트를 작성합니다. 그런 다음 새 프로젝트 (아마도 Ruby에서, 아마도 Gnu C++에서)를 시작할 것이고, 새 프로젝트에서 각 테스트를 통과하게 될 것입니다. 나는 이것을 "알고리즘 리팩토러 추출"이라고 부릅니다. 그 결과는 똑같은 일을하는 새 코드이어야합니다.

+0

방금 ​​더 명확하게 제 질문을 편집했습니다 : 내 DLL은 threadsafe가 아니므로 (threadsafe가 중요하지 않음). 내가 읽고있는 ISAPI는 스레드 안전성이 필요합니다. 위에서 언급 한 "다중 단일 스레드 프로세스"옵션은 없습니다. http://lyngtinh.blogspot.com/2011/07/difference-between-cgi-isapi-and.html (편집 : 아빠, 너무 빨리 입력하십시오.) 소스가 있습니다. 너는 무엇을 염두에 두 었는가? 큰 규모의 복잡한 라이브러리입니다. 리소스 제한으로 새로운 코드는 실제로 옵션이 아닙니다. – Jugulum

+0

"your ISAPI DLL plugin"수준에서 DLL을 스레드 관련 메모리에서 실행하여 스레드 안전을 강화하십시오. 또는 IIS를 제어 할 수있는 C++ HTTP 서버로 대체하거나 패치합니다. – Phlip

+0

IIS에서 ISAPI DLL, 라우팅 및 큐 요청의 여러 복사본을 생성 할 수 있다고 말하는가? 그렇다면, 나는 그것을 조사 할 것이다. 어떤 식 으로든 FastCGI보다 나은가요? – Jugulum

관련 문제