ajax - 如何使用 Protocol Buffer 序列化 Go 结构并在 Dart over Ajax 中使用它们

标签 ajax go dart protocol-buffers

如果我服务器上的 sql 数据库中有大量类型化数据,如何使用 Protocol Buffer 将这些数据发送到 dart 客户端?

最佳答案

首先使用

在您的计算机上安装 protoc
sudo apt-get install protobuf-compiler

然后从https://code.google.com/p/goprotobuf/安装go protocol buffer库. 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 对象 :)

关于ajax - 如何使用 Protocol Buffer 序列化 Go 结构并在 Dart over Ajax 中使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036213/

相关文章:

c# - 定时器触发更新面板更新导致失去焦点

javascript - 访问 jQuery 中新生成的内容

php - 从 jQuery AJAX 表单发布中获取未定义的响应

javascript - 如何使用ajax传递可变参数名称

git - 如何在 merge 到 master 时运行 Integration

go - 从HEAD请求输出Content-Type

go - go中的二维 slice 类型转换

json - 将多行字符串从文本字段保存到 JSON 文件

dart - 从 Dart 中的字符串创建对象的实例?

encryption - 客户提供的 dart/gcloud 加密 key