2009-09-30 35 views
5

Adobe's documentation for the AMF format dường như không thực sự xác định cấu trúc của toàn bộ thông báo AMF. Nó chỉ xác định định dạng của các kiểu dữ liệu riêng lẻ. Tôi đã đọc thứ chết tiệt năm lần và tôi chỉ hoàn toàn bỏ lỡ thông điệp AMF thực sự nên có, hoặc nó không có ở đó. Có ai biết về bất kỳ tài liệu nào về cấu trúc toàn bộ thông điệp thực tế không?Cấu trúc tin nhắn AMF?

Trả lời

9

Đặc điểm kỹ thuật có thể được mô tả là "terse".

Mã hóa AMF sử dụng byte được gọi là "loại điểm đánh dấu". Loại đánh dấu cho một số nguyên là giá trị 4. Dữ liệu số nguyên ngay sau thẻ này và dài từ 1 đến 4 byte. Độ dài thay đổi vì kiểu số nguyên là "được nén" sao cho các giá trị 0-127 chỉ yêu cầu 1 byte, trong khi các giá trị lớn hơn yêu cầu nhiều byte hơn. Định dạng số nguyên này được gọi là "U29" theo đặc điểm kỹ thuật.

Ví dụ, nếu chúng ta chỉ đơn giản là vượt qua các số nguyên "5", một gói AMF hợp lệ sẽ là hai byte này:
04 05

Trong các ứng dụng tìm thấy trên web, dữ liệu AMF đôi khi đi trước theo chiều dài được mã hóa dưới dạng một hàng dài không được ký hiệu trong thứ tự byte mạng. Nếu bạn đang quan sát một ứng dụng như vậy, bạn có thể thấy:
00 00 00 02 04 05, trong đó 00 00 00 02 cho biết dữ liệu AMF sau đây dài 2 byte.

Bây giờ, giả sử chúng tôi đã gửi một đối tượng sau khi nó đã có nhà xây dựng sau đây:

 
    this.ui = "button_press"; 
    this.param = 5; 

Sau đó chúng ta có thể thấy những điều sau đây trong các dữ liệu AMF:

0A - thẻ đối tượng
2B - u29o-val: 2 thành viên kín, đối tượng có đặc điểm và dữ liệu, có thể là thành viên năng động
01 - chuỗi rỗng - đối tượng ẩn danh
05 - chuỗi-by-giá trị, chuỗi dài: 2
75 69 - 'ui'
0B - chuỗi-by-giá trị, chuỗi dài: 5
70 61 72 61 6D - 'param'
19 - chuỗi-by-giá trị , chuỗi dài: 12
62 75 74 74 6F 6E 5F 70 72 65 73 73 - 'button_press'
04 - nguyên
05 - giá trị của số nguyên: 5
01 - tên sản phẩm nào, chấm dứt danh sách trống của động tôi mbers đối tượng này

Vì gói đó sẽ mất 28 byte, nó có thể được bắt đầu bằng: 00 00 00 1C khi gặp phải trong tự nhiên.

Một khả năng khác để xem xét là thông tin liên lạc AMF có thể được nén, thường sử dụng "deflate" nén có sẵn trong zlib.

Tôi hy vọng điều này sẽ giúp bạn phân loại đặc điểm kỹ thuật, nhưng nếu bạn có câu hỏi, tôi sẽ cố gắng trả lời chúng.

+0

Cảm ơn, rất hữu ích. Tôi đã thực sự hy vọng rằng một nơi nào đó có một mô tả BNF của một thông điệp AMF toàn bộ hợp lệ, bao gồm các tiêu đề và whatnot; Tôi đã đi qua ông mã cho AMFPHP chỉ để xem những gì nó làm khi nó giải mã, và có rất nhiều thứ trong đó thậm chí không được ám chỉ trong spec thực tế, hãy để một mình mô tả chi tiết. – dirtside

1

Nếu bạn đang tìm kiếm Remoting cấu trúc thông điệp nó được nối vào cuối của AMF0 spec - Phần 4