JSON o protocollo buffer per sostituire il messaggio TCP personalizzato

0

Originariamente, abbiamo due applicazioni di comunicazione con TCP / IP, entrambe implementate da C ++. I messaggi tra di loro sono di tipo personalizzato.

Orailprogrammaclientverràmodificatoinapplicazionewebinbaseanodejselacomunicazionetradiessiverràmodificatainbusdimessaggicomerabbitmq

Quindi il tipo di messaggio tra di loro dovrebbe essere cambiato.

JSON mi vengono in mente prima, tuttavia i messaggi personalizzati sono troppo complicati, che sono definiti da template e inheritance . Sembra che convertire il messaggio personalizzato in JSON non sia una buona opzione. Ho ragione?

class Address {
    int network;
    int addressType;
    //...
};

class MsgType{
    unsigned char   msgSeq;
    unsigned int    msgLen;
    //...
};

class Message{
    Address destination;
    Address source;
    MsgType msgType;

    //...
};

template <typename T, int RESPONSE_TYPE>
class ResponseMessage : public Message{
    //...
}

typedef struct{
    int number;
    int type;
}ConfigResp;

class CfgResp : public ResponseMessage<ConfigResp, CONFIG_REQUEST>
{
    //...
}

Protocol Buffers è un'altra opzione per me. Cosa dovrei fare? ridefinire il messaggio personalizzato nel buffer del protocollo? no no

Ecco la mia soluzione: basta avvolgere l'intero messaggio personalizzato originale (tipo binario) nel buffer del protocollo come un messaggio sul lato server, quindi decodificare il messaggio personalizzato (tipo binario) sul lato client. È possibile?

    
posta zangw 22.01.2015 - 08:22
fonte

1 risposta

1

Bene, le applicazioni tendono a diventare più complicate con il tempo. Se sarà necessario gestire versioni separate dell'API che a loro volta richiedono di mantenere diverse versioni della struttura dei dati, penso che sia meglio utilizzare i buffer di protocollo poiché sono stati progettati tenendo conto di alcune versioni. Con JSON sarai da solo.

Se in un dato momento ti viene richiesto di supportare solo una versione di un protocollo, puoi prendere in considerazione la scrittura di un serializzatore per i tuoi oggetti bussiness per trasmetterli in JSON avanti e indietro.

Un'altra cosa da considerare è la velocità. Penso che i buffer di protocollo potrebbero essere più veloci quando si tratta di serializzazione / velocità di deserializzazione rispetto a pure json. Ma questo deve essere attentamente testato poiché dipende dall'implementazione.

    
risposta data 31.01.2015 - 22:00
fonte

Leggi altre domande sui tag