Отправить ProtocolBuffer Message.Builder на другую машину через RMI - PullRequest
0 голосов
/ 31 марта 2011

У меня есть следующий псевдокод:

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.

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

У меня получилось ... Мне пришлось включить поле typeID в сообщение RMI. Затем я мог бы взять typeID и преобразовать его в построитель сообщений, а затем объединить с байтами частично построенного сообщения.

0 голосов
/ 31 марта 2011

Любая причина, по которой вы не можете позвонить build(), получить Message и отправить его в любом правильном формате (например, toString()).С другой стороны, вы можете надуть его обратно в Message и превратить его в компоновщик с toBuilder(), если это необходимо.

Вы также можете просто преобразовать сообщение в двоичный формат и отправить его,

Может быть, я неправильно понимаю - весь смысл ProtocolBuffers состоит в том, чтобы получить Message s в представлении канала, так что есть несколько способов сделать это (большинство из которых Serializable илитривиально завернутый, чтобы быть.)

...