Protobuf è carino e dandy, ma non è stato creato con l'auto-descrizione in mente. Ora questo è assolutamente ok se stai usando un protocollo ben definito e vuoi sostituirlo per es. Messaggi SOAP o semplicemente vuoi sostituire un'API JSON riposante o qualcosa di simile.
Comunque mi piacerebbe usarlo su un Websocket e invece di chiuderlo e riaprirlo ancora e ancora con URL diversi - che sconfigge il punto del websocket - vorrei tenerlo aperto e inviare diversi messaggi sul collegare come Matrici di byte !
Ora il mio problema è semplice ma complesso da risolvere. Voglio inviare un messaggio arbitrario dal client al server (o viceversa) e il ricevitore dovrebbe determinare in modo semplice quale tipo di messaggio ha ricevuto e come interpretarlo.
In pseudocodice questo dovrebbe essere così:
client :
Message m = new Auth().withUserName("Sorona").withPassword("TotallyNotMyActualPassword")
ws.send(m)
server :
Map[Type, Handler]
receiveMessage(Message m) {
handlers.get(m.determineType()).handle(m)
}
handler :
trait Handler[T] {
def handle()
}
Quindi quello che voglio veramente sono due cose:
1) Essere in grado di determinare il tipo effettivo di qualsiasi messaggio senza aumentare (drasticamente) la dimensione del messaggio.
2) Essere robusti ed estendibili
Per un nuovo tipo di messaggio, voglio semplicemente aggiungere un gestore e farlo.
Nessuna enumerazione hardcoded che devo mantenere, nessuna struttura di switch case che devo adottare ecc.
In OOP semplice questo sarebbe abbastanza facile, ma con i Protobufs sono un po 'bloccato.
Qualche suggerimento?