Se si dispone di una grande quantità di dati digitati in un database sql sul mio server, come si inviano questi dati a un client di dart utilizzando i buffer di protocollo?Come serializzare le strutture Go utilizzando i buffer di protocollo e utilizzarle in Dart su Ajax
Come serializzare le strutture Go utilizzando i buffer di protocollo e utilizzarle in Dart su Ajax
risposta
prima cosa installare ProtoC sul computer utilizzando
sudo apt-get install protobuf-compiler
Poi installare la libreria di buffer protocollo vanno da https://code.google.com/p/goprotobuf/. La versione di dartlang può essere trovata qui: https://github.com/dart-lang/dart-protoc-plugin.
Il passo successivo è scrivere un file .proto contenente una definizione del messaggio da inviare. esempi possono essere trovati qui: https://developers.google.com/protocol-buffers/docs/proto.
Ad esempio:
message Car {
required string make = 1;
required int32 numdoors = 2;
}
quindi utilizzare lo strumento ProtoC per compilare un file go e un file dart per il file proto.
per creare un oggetto auto in movimento, ricordarsi di utilizzare i tipi di condizione:
c := new(Car)
c.Make = proto.String("Citroën")
c.Numdoors = proto.Int32(4)
Quindi è possibile inviare l'oggetto su un http.ResponseWriter, w come segue:
binaryData, err := proto.Marshal(c)
if err != nil {
// do something with error
}
w.Write(binaryData)
In il codice Dart, è possibile recuperare le informazioni come segue:
void getProtoBuffer() {
HttpRequest.request("http://my.url.com", responseType: "arraybuffer").then((request) {
Uint8List buffer = new Uint8List.view(request.response, 0, (request.response as ByteBuffer).lengthInBytes); // this is a hack for dart2js because of a bug
Car c = new Car.fromBuffer(buffer);
print(c);
});
}
Se tutto ha funzionato, ora si dovrebbe avere una Macchina o bject nella tua applicazione Dart :)
Sono sorpreso che leggere i dati binari come una stringa funziona. Cosa fai riguardo le codifiche dei personaggi? Ad esempio, i dati UTF8 non dovrebbero mai contenere determinate sequenze di byte: http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences –
Scusa, hai assolutamente ragione! Il codice originale non funziona con utf-8. Lo aggiornerò ... fatto! – ehrt1974
Risposta straordinaria ... puoi approfondire il motivo per cui è richiesto questo dart2js mod? L'ho colpito poco prima di leggere la tua risposta e sono curioso. – sjr