2011-03-30 76 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 
    } 
} 

问题是Message.Builders没有实现Serializable,所以无法通过RMI直接发送。

有没有简单的方法来做到这一点?

我已经尝试从构建器构建部分PB并发送过来,但为了重构它,您需要知道类型或描述符。描述符也不实现Serializable。

感谢

回答

0

任何原因,你不能叫build(),得到Message,和整个以任何正确的格式发送(例如,toString())。另一方面,您可以将其充值回Message,如果需要,可以将其重新转换为具有toBuilder()的生成器。

您也可以将消息转换为二进制格式并发送该消息。

也许我误解 - ProtocolBuffers的全部点是将Message s变成一个线表示形式,所以有很多方法可以做到这一点(其中大部分方法都是Serializable或简单地包装成)。

0

我得到它的工作......我不得不在RMI消息中包含typeID字段。然后,我可以将typeID解析为Message Builder,然后合并来自部分构建消息的字节。