我試圖在服務器和客戶端之間傳輸數據以實現扭曲。據我所知,使用self.transport.write([數據])只有在數據是字符串的情況下才有效。有沒有其他方式可以發送其他類型的對象?謝謝!以扭曲的形式在服務器和客戶端之間發送數據
回答
套接字攜帶字節。這是他們唯一攜帶的東西。 TCP連接的任何兩個端點只能將字節傳送給對方。
字節不是每種通信形式最有用的數據結構。所以在這個字節傳輸的基礎上,我們發明了用於格式化和解釋字節的方案。這些是協議。
Twisted將協議表示爲類,almsot總是子類twisted.internet.protocol.Protocol
,它實現了特定的方案。
這些類具有將不是純字節的東西轉換爲純字節的方法。例如,twisted.protocols.basic.NetstringReceiver
是netstring protocol的實施。它將特定數量的字節轉換爲表示字節數和字節本身的字節。這是一個相當微妙的協議,因爲字節數並不是顯而易見的,也是需要傳達的信息。
這些類還根據它們實現的協議,解釋從網絡接收到的字節,方法dataReceived
,並將結果信息轉換爲更加結構化的信息。 NetstringReceiver
使用長度信息從網絡接收正確的字節數,然後將它們作爲單個Python str
實例傳遞給其回調函數stringReceived
。其他協議多於NetstringReceiver
。例如,twisted.protocols.ftp
包含FTP協議的實現。 FTP是一種協議,旨在通過套接字(或者幾個套接字,實際上)傳遞文件列表和文件。 twisted.mail.pop3
實現POP3,一種通過套接字傳輸電子郵件的協議。
有很多很多不同的協議,因爲有很多很多不同的東西你可能想要做。取決於你想要做什麼,可能有不同的方法來轉換字節和字節,以使事情變得更容易或更快或更強大(等等)。所以沒有一個適用於一般情況的協議。這包括「發送對象」的情況,因爲對象可以採用許多不同的形式,並且可能有許多不同的原因要發送給它們,以及許多不同的方式,你可能想要處理諸如對象變異先前發送,等等。
你可能想花一點時間思考你需要什麼樣的溝通。這應該建議您選擇進行通信的協議的某些內容。
例如,如果您希望能夠調用連接另一側存在的Python對象的方法,那麼Twisted Spread可能會很有趣。
如果您想要某種跨語言,而只需傳達簡單類型(如整數,字符串和列表),則XML-RPC(Twisted How-To)可能更適合。
如果您需要的協議比XML-RPC更具空間效率並且支持更復雜類型的序列化,那麼AMP可能更合適。
而且名單還在繼續。:)
- 1. 扭曲 - 將數據從服務器發送到客戶端
- 2. Android - 在服務器和客戶端之間發送數據
- 3. 組織在客戶端服務器之間發送的數據
- 4. 在客戶端和服務器之間發送數據2種方式
- 5. 扭曲的服務器 - 客戶端數據共享
- 6. 如何從服務器發送列表到客戶端在扭曲的Python?
- 7. 通過網絡在客戶端和服務器之間發送數據
- 8. 扭曲 - 將數據發送到選定的客戶端
- 9. UDP客戶端和服務器與扭曲的Python
- 10. 從扭曲的客戶端發送多個郵件到服務器
- 11. 以客戶端和服務器之間的字節數組形式發送圖像
- 12. http echo服務器和客戶端扭曲
- 13. 儘量減少客戶端/服務器之間在javascript中發送的數據
- 14. 線程服務器,在客戶端之間發送消息
- 15. 發送客戶端 - 服務器之間的消息ID - Java的
- 16. 在服務器和客戶端之間傳遞數據(node.js + mongodb)
- 17. 在客戶端和服務器之間傳遞json數據
- 18. 扭曲:服務器端進程完成時通知客戶端
- 19. 服務器和多個客戶端之間的數據同步
- 20. Nodejs:服務器和客戶端之間的數據交換
- 21. 服務器和客戶端之間的Xamarin C#數據
- 22. 同步服務器和客戶端之間的數據
- 23. 扭曲的服務器 - 客戶端互連XML-RPC和REST服務
- 24. python扭曲的簡單的客戶端 - 服務器通信
- 25. 服務器和客戶端之間的C發送函數不工作
- 26. 以扭曲形式實現重新連接http客戶端
- 27. 蟒蛇扭曲簡單的服務器客戶端
- 28. 扭曲的單元測試客戶端 - 服務器交互
- 29. Qt C++ tcp客戶端與python扭曲的服務器
- 30. 多個客戶端的扭曲服務器
這太棒了,謝謝! – Thien 2010-07-16 23:14:43