2012-11-29 4 views
1

필자는 임의의 함수 또는 함수 호출에 추가 할 수있는 (주석, 반사, 정의 또는 완전히 다른 무언가가 필요함) 필요합니다.네트워크를 통해 함수 매개 변수를 전송하기 위해 C++에서 코드를 생성하는 좋은 방법이 있습니까?

이 기능이 추가 된 모든 기능 f에 대해 t이라는 특정 기능이 f 매개 변수와 함께 호출되어야합니다.

기능 t은 이제 네트워크를 통해 매개 변수를 다른 프로그램에 보내야합니다.

이런 식으로 할 방법이 있습니까?

답변

3

이 기본 원리는 marshalling이라고하며 여기서 함수의 매개 변수는 다른 컴퓨터로 보낼 수있는 방법으로 래핑됩니다. 보낸 사람은 매개 변수를 마샬링하고 수신기는 언 마샬합니다. 둘 다 유형에 대한 이해가 필요하며 다른 컴퓨터 아키텍처와 일치하는 방식으로 수행해야합니다.

원격 프로 시저 호출 (RPC)은 한 컴퓨터에서 다른 컴퓨터로 함수 호출을 보내고 그 뒤에 약간의 마샬링이 필요합니다.

XMLRPC는 빅터가 지적한대로 XML을 통해 마샬링이 이루어지는 곳입니다. 다른 많은 패키지가 있으며 RPC와 검색을위한 인터넷 검색은 더 많은 가능성을 제공해야하지만 XMLRPC는 사용자가 원하는 것일 수 있습니다.

CORBA와 DCOM은 관련된 메커니즘입니다. 컴퓨터간에 함수 호출을 보내는 아이디어는 분산 시스템에서 주요 개념 중 하나입니다. 그래서 좀 더 자세히 살펴보고, 아마도 특정 문제에 대한 간단한 해결책이있을 것입니다.

+0

당신의 대답이 분명히 더 정교하기 때문에 나는 upvote 할 것입니다. DCOM/CORBA를 다소 복잡하기 때문에 접촉하지 않으려했습니다. –

+2

+1,하지만 용어에 의문이 있습니다. 일반적인 원칙은 RPC입니다. RPC의 필수 요소 중 하나는 인수를 마샬링하는 것입니다. –

+0

@Rob : 좋은 지적. 처음에는 마샬링이 해결책이라고 생각했지만 사실 RPC 메커니즘이 필요할 것입니다. – Zane

1

XMLRPC 원격 컴퓨터에서 함수를 호출하려는 경우 찾고있는 라이브러리가 될 수 있습니다. XML RPC 스펙을 사용하여 매개 변수를 마샬링하는 코드를 생성합니다.

1

당신이 구글 프로토콜 버퍼를 사용할 수 있습니다 https://developers.google.com/protocol-buffers/docs/overview

그것은 직렬화 라이브러리 사용하기 쉽고 휴대가. 또한 Python, Java 및 다른 언어와 같은 다른 언어로 C++ 코드에 직렬화 된 객체를 직렬화하여 C++ 코드에 '대화 할'수있는 프로그램을 작성할 수 있습니다 (예 : 테스트 용이). .

0

Linux/BSD 환경에 있다면 'man rpcgen'을 실행하십시오. DCE/CORBA보다 분산 된 앱을 만드는 것이 더 쉽다는 것을 알았습니다.

'Inter-process function call'또는 IFC라는 이름을 쓰려고합니다.

나는 실시간 브라우저 기반의 가시성이 응용 프로그램에 내장 된 확장 가능한 클라우드 응용 프로그램을 생성하기 위해 IFC 컴파일러 (ifcc)에서 작업 해 왔습니다.

프로토 타입 컴파일러가 작동 중입니다. 프레임 워크의 가시성 부분도 작동하지만 인스트루먼트 된 코드를 생성하기 위해 아직 컴파일러에 통합되지 않았습니다.

Ifcc는 .h 파일의 함수 프로토 타입 선언을 기반으로 C include 파일을 가져 와서 마샬링을위한 C 소스 코드를 생성하고 클라이언트 및 서버 프록시/스텁을 이질적인 용도로 사용하기에 적합합니다 바이트 순서 지정/빅 엔디안/리틀 엔디안 환경).

그리고, 오, 그건 그렇고, ifcc는 똑똑한 컴파일러입니다. 배열, typedef, 중첩 된 구조체 등을 처리 할뿐만 아니라 임의의 포인터를 추적합니다. 예 : 이중 링크 목록에 대한 포인터가있는 함수를 호출하면이를 패키지화하여 보내고받는 쪽에서 이중 링크 목록을 다시 만듭니다.

사람들이 게임에 관심이있는 경우 시스템의 'uname -a'출력과 함께 사용중인 컴파일러와 함께 주석을 추가하십시오. 관심이 많으면 개발자가 배우고 사용하고 실험 할 수 있도록 할 수 있습니다.