0

次の疑似コードがあります。

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 を構築して送信しようとしましたが、再構築するには、型または記述子を知る必要があります。Descriptor も Serializable を実装していません。

ありがとう

4

2 に答える 2

0

build()を呼び出して を取得しMessage、正しい形式 (例: ) で送信することができない理由toString()。もう一方の端では、それをインフレートして に戻し、必要に応じMessageて でビルダーに戻すことができますtoBuilder()

メッセージをバイナリ形式に変換して送信することもできます。

たぶん私は誤解しています.ProtocolBuffersの要点はMessagesをワイヤー表現にSerializableすることです.

于 2011-03-30T21:40:23.297 に答える
0

うまくいきました... RMI メッセージに typeID フィールドを含める必要がありました。次に、typeID を取得して Message Builder に解決し、部分的に作成されたメッセージのバイトを mergeFrom することができます。

于 2011-03-30T23:23:28.473 に答える