2010-07-07 34 views
9

Tôi cần gửi các đối tượng trên mạng. Tôi sẽ sử dụng Twisted, và tôi đã bắt đầu tìm kiếm tài liệu cho nó.Cách tốt nhất để gửi một đối tượng qua mạng bằng Python là gì?

Theo như tôi biết, cách duy nhất python thực hiện ổ cắm là thông qua văn bản. Vì vậy, làm thế nào tôi sẽ gửi một đối tượng bằng cách sử dụng dây? Pickle? Hay có cái gì tốt hơn?

+2

Sử dụng ống Internet –

+3

Thực ra, bạn nên sử dụng các ống. Ống được thay thế bằng các ống vào năm 1998. – jathanism

+1

Có. Một loạt trong số họ, trên thực tế. –

Trả lời

18

Các serialization chung nhất trên cung cấp giữa Python end-điểm là định dạng dưa (bằng Python 2.any, hãy chắc chắn để sử dụng các mô-đun cPickle, và các giao thức -1 aka pickle.HIGHEST_PROTOCOL; nếu bạn cần khả năng tương tác giữa Python 2.any và Python 3. cần nhiều sự chăm sóc hơn). Đối với các đối tượng đặc biệt đơn giản, mô-đun marshal đôi khi có thể nhanh hơn và gọn hơn. Để tương thích với các điểm cuối không phải Python, json có thể là tốt nhất (hoặc bạn có thể sử dụng xml để xác định hoặc áp dụng các định dạng tuần tự hiện có khác), nhưng những định dạng này sẽ có khả năng định dạng và phân tích cú pháp hơn.

Theo như tôi biết, cách duy nhất python thực hiện ổ cắm là thông qua văn bản.

Nope, tất cả các chuỗi byte được hoan nghênh -) Bạn có thể bị nhầm lẫn bởi thực tế rằng trong Python 2 một "chuỗi bình thường" thực sự là một chuỗi các byte ("text" sẽ là loại unicode)!; Python 3 đặt mọi thứ đúng và sử dụng Unicode cho "chuỗi thông thường" và một loại chuỗi byte cụ thể cho các chuỗi byte.

Chuỗi byte là cách tổng quát trong đó bất kỳ ngôn ngữ nào sẽ thực hiện bất kỳ dạng tuần tự hóa và tuần tự hóa nào, theo một số giao thức hoặc khác - luồng hoặc blob byte như vậy có thể đi vào mạng, cơ sở dữ liệu, tệp đơn giản, v.v. , tất nhiên.

Xoắn cung cấp định dạng tuần tự của riêng nó, như phần twisted.spread - phần lớn được sử dụng với Perspective Broker (PB) nhưng bạn có thể sử dụng lại cho mục đích của riêng mình nếu bạn không muốn sử dụng PB vì một số lý do đặc biệt. Các tài liệu cho phần serialization, twisted.spread.jelly, là here, và tóm tắt tốt mục tiêu của định dạng ...:

S-biểu hiện dựa trên sự kiên trì của đối tượng python.

Nó làm điều gì đó rất giống như Pickle; tuy nhiên, mục tiêu chính của pickle dường như là hiệu quả (cả trong không gian và thời gian); Mục tiêu chính của jelly là bảo mật, khả năng đọc của con người và tính di động đối với các môi trường khác.

Nếu bạn quan tâm nhiều hơn về bảo mật, khả năng đọc và khả năng di động, hơn tốc độ và độ chặt thì thạch có thể thực sự phục vụ bạn tốt.

+0

Điều này thật tuyệt vời. Cảm ơn đã giúp đỡ! –

+0

chỉ 2 xu, tôi không có gì ngoài rắc rối với dưa chua (cpickle). Tôi sẽ không sử dụng nó như là một serializer đối tượng chung vì sự mong manh của nó. Tôi đã tìm thấy thành công tốt nhất với một trong hai loại dữ liệu cơ bản hoặc sử dụng mục đích dao được xây dựng để tuần tự hóa. – ebt

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