2010-07-14 114 views

回答

7

套接字攜帶字節。這是他們唯一攜帶的東西。 TCP連接的任何兩個端點只能將字節傳送給對方。

字節不是每種通信形式最有用的數據結構。所以在這個字節傳輸的基礎上,我們發明了用於格式化和解釋字節的方案。這些是協議。

Twisted將協議表示爲類,almsot總是子類twisted.internet.protocol.Protocol,它實現了特定的方案。

這些類具有將不是純字節的東西轉換爲純字節的方法。例如,twisted.protocols.basic.NetstringReceivernetstring protocol的實施。它將特定數量的字節轉換爲表示字節數和字節本身的字節。這是一個相當微妙的協議,因爲字節數並不是顯而易見的,也是需要傳達的信息。

這些類還根據它們實現的協議,解釋從網絡接收到的字節,方法dataReceived,並將結果信息轉換爲更加結構化的信息。 NetstringReceiver使用長度信息從網絡接收正確的字節數,然後將它們作爲單個Python str實例傳遞給其回調函數stringReceived。其他協議多於NetstringReceiver。例如,twisted.protocols.ftp包含FTP協議的實現。 FTP是一種協議,旨在通過套接字(或者幾個套接字,實際上)傳遞文件列表和文件。 twisted.mail.pop3實現POP3,一種通過套接字傳輸電子郵件的協議。

有很多很多不同的協議,因爲有很多很多不同的東西你可能想要做。取決於你想要做什麼,可能有不同的方法來轉換字節和字節,以使事情變得更容易或更快或更強大(等等)。所以沒有一個適用於一般情況的協議。這包括「發送對象」的情況,因爲對象可以採用許多不同的形式,並且可能有許多不同的原因要發送給它們,以及許多不同的方式,你可能想要處理諸如對象變異先前發送,等等。

你可能想花一點時間思考你需要什麼樣的溝通。這應該建議您選擇進行通信的協議的某些內容。

例如,如果您希望能夠調用連接另一側存在的Python對象的方法,那麼Twisted Spread可能會很有趣。

如果您想要某種跨語言,而只需傳達簡單類型(如整數,字符串和列表),則XML-RPCTwisted How-To)可能更適合。

如果您需要的協議比XML-RPC更具空間效率並且支持更復雜類型的序列化,那麼AMP可能更合適。

而且名單還在繼續。:)

+1

這太棒了,謝謝! – Thien 2010-07-16 23:14:43

相關問題