2012-04-08 4 views
0

나는 여러 구성 요소 사이에 프로토콜을 디자인하고 싶습니다. 각각은 다른 호스트에서 별도의 프로세스로 실행될 수 있습니다. 항상 개시 자 (클라이언트)와 응답하는 사람 (서버)이 있습니다. 클라이언트는 여러 언어 java/C#/C++/cli 일 수 있습니다. 제 경우의 서버는 항상 자바에 있습니다.
그래서 나는 다음과 같은 속성에 대해 생각 : 그것은 일반 텍스트하여 디버그 쉽게 찾아 볼 수 있어야하므로http를 통해 api/프로토콜을 찾고

  • .
  • 한 면만 업그레이드 할 수 있어야합니다 (클래스 직렬화 및 엄격한 메소드 서명이 없음을 의미).
  • 프레임 워크 인 경우에는 in이 얇아야합니다 (WSDL이 내 요구에 너무 많이 보입니다).

나는 tcp를 통해 http를 사용한다고 생각했습니다.
구문에 관심이 많습니다. 이미 이러한 기능을 제공하는 java에 프레임 워크가있는 경우 내가 어렴풋이 기억하고있는 것은 Spring입니다.

EDIT : 나는 얇은 프레임 워크를 선호하며, RPC에서 메서드 서명을 변경하면 경쟁력 문제가 발생할 수 있습니다.
나는 이미 jaxb을 사용하고 있기 때문에 this example을 찾았습니다.

+0

달성하고자하는 것은 "원격 프로 시저 호출"(RPC) 일명 "원격 (메서드) 호출"(RI/RMI)입니다. 당신이 그것에 대해 읽고 몇 가지 프레임 워크를 검토하고 가장 적합한 것을 선택하는 것이 좋습니다. – dtech

답변

1

나는 SOAP으로 갈 것이다. 가장 쉬운 방법은 아니지만 거의 모든 언어/플랫폼 조합에 다양한 라이브러리가 있으며 확장이 가능합니다. XML-RPC도 제안 될 수 있지만 SOAP은 XML-RPC를 사용하지 않는 것이 좋습니다.

1

WSDL을 사용할 것입니다. 실제로 다양한 언어로 작성된 구성 요소간에 원격 통신을 설정하기위한 것입니다. 나는 C#, PHP, C++, Python, Java로 오랫동안 사용 해왔고 훌륭했습니다. 기본적으로 할 일은 실제 프로토콜을 디자인하는 것입니다. WSDL은 그 자체가 아닙니다.이 경우 프로토콜은 WSDL 상단에있는 명령 집합입니다 (예 : WSDL). 안녕 명령 (일종의 핑), 로그인 및 로그 아웃 명령 (세션), 그리고 당신이 필요로하는 모든 종류의 물건.

+0

WebServices는 항상 정상입니다. 예를 들어 Apache CXF에서 시작할 수 있습니다. –

0

TCP 레벨을 유지하고 zeromq과 같은 지능형 라이브러리를 사용하여 모든 배선을 처리 할 수 ​​있습니다. 그런 다음 프로토콜 자체는 메시지 집합이며 요구 사항에 맞게 조정할 수 있습니다 (그리고 전송 인프라에 의해 미리 결정되지 않은 WSDL과 마찬가지로).

예 (나는 그들의 대답에 예를 맞게 WebService에 지지자 도전)

서버 (간결을위한 파이썬) :

는 클라이언트
import zmq 
ctx = zmq.Context() 
socket = ctx.socket(zmq.REP) 
socket.bind('tcp://0.0.0.0:12345') 
while True: 
    message = socket.recv() 
    # 'status' and 'shutdown server' would be part of your protocol 
    if message == "status": 
     socket.send("I'm ok") 
    elif message == "shutdown server": 
     socket.send("Ok, bye bye") 
     break 
    # implement your other commands here ... 
socket.close() 

:

import zmq 
ctx = zmq.Context() 
socket = ctx.socket(zmq.REQ) 
socket.connect('tcp://localhost:12345') 
socket.send('shutdown server') 
reply = socket.recv() 
print(reply) 

입니다 그것. 그리고 예, zeromq는 30 개 이상의 언어 바인딩을 제공합니다.

관련 문제