RMI

2011-03-30 6 views
0

나는 다음과 같은 pesudocode을 통해 다른 컴퓨터에 ProtocolBuffer Message.Builder 보내기 :RMI

public void sendPB(ObjectId userId, Message.Builder mb) { 
    if (userId is logged in to server) { 
     set mb.ackId to random chars 
     lookup socket and send mb.build() 
    } 
    else { 
     forward message to user's server via RMI 
    } 
} 

문제는 당신이 RMI를 통해 직접 보낼 수 있도록 Message.Builders는, 직렬화 구현하지 않는 것입니다.

쉬운 방법이 있나요?

빌더에서 부분 PB를 작성하고이를 보내려고했지만 재구성하기 위해 유형 또는 설명자를 알아야합니다. 디스크립터는 Serializable을 구현하지 않는다.

감사

답변

0

당신이 Message를 얻을 build()를 호출하고 어떤 올바른 형식은 건너을 보낼 수 없습니다 어떤 이유 (예를 들어, toString()). 다른 쪽 끝에서 Message으로 다시 팽창시켜야하며, 필요한 경우 toBuilder()으로 작성기로 되돌릴 수 있습니다.

메시지를 바이너리 형식으로 변환하여 보낼 수도 있습니다.

어쩌면 나는 오해하고 있습니다. ProtocolBuffers의 전체적인 점은 와이어 표현으로 Message을 얻는 것이므로, 그 중 많은 방법이 있습니다 (대부분 Serializable 또는 trivially로 포장되어 있습니다).

0

나는 그것을 작동 시켰습니다 ... 나는 typeID 필드를 RMI 메시지에 포함시켜야했습니다. 그런 다음 typeID를 사용하여 Message Builder로 해석 한 다음 부분적으로 작성된 메시지의 바이트를 병합 할 수 있습니다.