python中的套接字模塊包裝了_socket
模塊,它是C實現的東西。同樣,socket.socket將採用_sock
參數,該參數必須實現_socket
接口。在某些方面_sock
必須是來自_socket
的底層套接字類型的實際實例,因爲C代碼執行類型檢查(與純Python不同)。純python socket模塊
鑑於您可以傳入類似於套接字的對象_sock
,您似乎可以編寫一個可以傳遞給socket.socket的套接字模擬器。它需要模擬底層套接字的行爲,但在內存中,而不是在真實的網絡或任何東西上。它不應與_socket
區分開來。
需要什麼來建立這種模擬?
我知道,我知道,這不是非常實用。事實上,我學會了使用普通套接字比較簡單並且不需要假套接字的難題。我原以爲我會用假套接字更好地控制測試環境。無論我「浪費」了多少時間,我發現我在這個過程中學到了一些關於套接字和python的知識。
我猜測任何解決方案必須是相互作用的對象的這樣一個堆棧:
something_that_uses_sockets (like XMLRPCTransport for ServerProxy)
|
V
socket.socket
|
V
FakeSocket
|
V
FakeNetwork
|
V
FakeSocket ("remote")
|
V
socket.socket
|
V
something_else_that_uses_sockets (like SimpleXMLRPCServer)
好像這基本上是怎麼回事真正的插槽,除了真正的網絡,而不是假一個(加上操作系統級別的插座),而不是FakeSocket的_socket
。
無論如何,只是爲了好玩,關於如何解決這個問題的任何想法?
順便說一句,有FakeSocket你可以做一些類似插座的東西,在谷歌應用程序...
太棒了!這正是我正在尋找的。也許我應該終於回頭看看扭曲。 :) – 2010-08-14 04:06:21