如果您在我的服务器上的 sql 数据库中有大量类型的数据,您如何使用协议缓冲区将这些数据发送到 dart 客户端?
问问题
1462 次
1 回答
13
首先使用在您的计算机上安装 protoc
sudo apt-get install protobuf-compiler
然后从https://code.google.com/p/goprotobuf/安装 go 协议缓冲区库。dartlang 版本可以在这里找到:https ://github.com/dart-lang/dart-protoc-plugin 。
下一步是编写一个 .proto 文件,其中包含要发送的消息的定义。示例可以在这里找到:https ://developers.google.com/protocol-buffers/docs/proto 。
例如:
message Car {
required string make = 1;
required int32 numdoors = 2;
}
然后使用 protoc 工具为这个 proto 文件编译一个 go 文件和一个 dart 文件。
要在 go 中创建 Car 对象,请记住使用提供的类型:
c := new(Car)
c.Make = proto.String("Citroën")
c.Numdoors = proto.Int32(4)
然后您可以通过 http.ResponseWriter 发送对象,如下所示:
binaryData, err := proto.Marshal(c)
if err != nil {
// do something with error
}
w.Write(binaryData)
在 Dart 代码中,您可以按如下方式获取信息:
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);
});
}
如果一切正常,您现在应该在 Dart 应用程序中拥有一个 Car 对象 :)
于 2013-09-26T18:45:13.073 回答