2013-12-09 2 views
1

MQTT로 RPC 스타일 통신 (동기 요청/응답)을 구현하는 가장 좋은 방법은 무엇입니까? 아니면 다른 인터페이스 (예 : REST API)를 사용하는 것이 맞습니까?MQTT로 RPC 스타일 요청

미리 감사드립니다.

답변

2

MQTT는 PUB/SUB 시스템으로 RPC에 적합하지 않습니다. 필요한 동시성을 시뮬레이트하기 위해 MQTT 위에 무언가를 부딪 칠 수도 있지만 실제 RPC 의미를 제공하는 시스템을 찾는 것이 더 나을 것입니다.

즉, 응용 프로그램에 따라 여러 MQTT 주제를 등록하고 한 주제에서 PUBlishing하고 두 번째 주제에서 응답을 수신하여 왕복 통신을 시뮬레이트 할 수 있습니다. 그러나 이것은 기본적으로 동기 적이 지 않습니다.

예를 들어, "질문"을 topic/query으로 게시하고 topic/response에 대한 응답을 기대할 수 있습니다.

+0

확인을 들으. 내가주의해야 할게있어? 주제 구조, 요청 ID 또는 동기화? –

+0

작은 예제를 추가했지만 앞서 말한 것처럼 MQTT가 사용 케이스에 이상적이지 않을 수도 있습니다. :) – jpmens

+0

모바일 멀티 플레이어 게임용입니다. 나는 오버 헤드가 적고 CPU와 배터리에 부담이 적기 때문에 MQTT를 선택했다. 나는 분산 컴퓨팅에서 초보자이기 때문에 최상의 선택이 아닐 수도있다. –

1

내 응용 프로그램에서 수행 한 작업에는 메시지에 응답 항목이 포함되어 있습니다. 발신자는 uuid를 사용하여 주제를 생성 한 다음 해당 주제에 가입합니다. 그런 다음 응답 주제를 포함하는 메시지를 보내면 수신자가이 주제에 대한 응답을 보냅니다. 전송이 회신을 받으면 주제를 구독 취소합니다. 송신자와 수신자 모두 비동기 적이지만 트랜잭션을 수행 할 수 있습니다.

의사 코드 :

 

sender 
    generate uuid 
    subscribe(topic=uuid) 
    msg = { 
     ... 
     resp_topic: uuid 
    } 
    publish(topic, msg) 

receiver 
    on_message 
     topic is from sender 
     do some work 
     publish(sender_data['resp_topic'], result) 

sender 
    on_message 
     topic is resp_topic 
      get result 
      unsubscribe(resp_topic) 

관련 문제