如何使用协议缓冲区序列化Go结构并在Dart over Ajax中使用它们

时间:2013-09-26 18:45:13

标签: ajax go dart protocol-buffers

如果我的服务器上的sql数据库中有大量的类型化数据,那么如何使用协议缓冲区将此数据发送到dart客户端?

1 个答案:

答案 0 :(得分: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对象:)