2013-09-26 36 views

Trả lời

13

Đầu tiên cài đặt protoc trên máy tính của bạn sử dụng

sudo apt-get install protobuf-compiler 

Sau đó cài đặt các thư viện đi giao thức đệm từ https://code.google.com/p/goprotobuf/. Phiên bản dartlang có thể được tìm thấy ở đây: https://github.com/dart-lang/dart-protoc-plugin.

Bước tiếp theo là viết tệp .proto chứa định nghĩa của tin nhắn được gửi đi. có thể tìm thấy các ví dụ tại đây: https://developers.google.com/protocol-buffers/docs/proto.

Ví dụ:

message Car { 
    required string make = 1; 
    required int32 numdoors = 2; 
} 

Sau đó sử dụng công cụ protoc để biên dịch một file đi và một tập tin phi tiêu cho file proto này.

Để tạo một đối tượng trong xe đi, hãy nhớ sử dụng các loại cung cấp:

c := new(Car) 
c.Make = proto.String("Citroën") 
c.Numdoors = proto.Int32(4) 

Sau đó, bạn có thể gửi các đối tượng trên một http.ResponseWriter, w như sau:

binaryData, err := proto.Marshal(c) 
if err != nil { 
    // do something with error 
} 
w.Write(binaryData) 

Trong mã Dart, bạn có thể tìm nạp thông tin như sau:

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); 
    }); 
} 

Nếu mọi thứ đã hoạt động, bây giờ bạn sẽ có xe ô tô o bject trong ứng dụng Dart của bạn :)

+0

Tôi ngạc nhiên khi đọc dữ liệu nhị phân dưới dạng chuỗi hoạt động. Bạn làm gì về mã hóa ký tự? Ví dụ: dữ liệu UTF8 không bao giờ nên chứa các chuỗi byte nhất định: http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences –

+0

Xin lỗi, bạn hoàn toàn đúng! Mã gốc không hoạt động với utf-8. Tôi sẽ cập nhật nó ... xong! – ehrt1974

+0

Câu trả lời tuyệt vời ... bạn có thể giải thích lý do tại sao hack dart2js này là bắt buộc? Tôi đánh nó ngay trước khi tôi đọc câu trả lời của bạn và tôi tò mò. – sjr

Các vấn đề liên quan