2014-02-08 93 views

回答

2

HTTPServer繼承自SocketServer.TCPServer,所以我認爲可以公平地說它不適用於這種用例,即使您嘗試解決它,也可能遇到問題,因爲您有點「濫用「它。

話雖這麼說,但是,它有可能本身定義的HTTPServer一個子類,創建和綁定Unix套接字很簡單,因爲這樣的:

class UnixHTTPServer(HTTPServer): 
    address_family = socket.AF_UNIX 

    def server_bind(self): 
     SocketServer.TCPServer.server_bind(self) 
     self.server_name = "foo" 
     self.server_port = 0 

然後,只是通過你想要的路徑綁定到由server_address參數構造函數:

server = UnixHTTPServer("/tmp/http.socket", ...) 

此外,雖然,我不能保證它實際上將很好地工作。您可能需要實現自己的HTTP服務器。

+0

我很驚訝http服務器的設計與網絡套接字想法緊密結合,而不是簡單的阻塞流,它可能是一個底下的套接字。這似乎是一個糟糕的設計。是否沒有獨立於HTTP請求源的標準HTTP解析庫? – user3286380

+0

如果您認爲HTTP基礎架構的其他部分與TCP機制緊密結合,這並不是很奇怪。例如,CGI環境被指定爲包含具有「服務器端口」的變量,記錄器經常使用IP地址等等。我可以在一個層面上認爲它有點難看,但是看到HTTP在實踐中幾乎只用於TCP,這種約定的出現並不是非常意外。 – Dolda2000

+0

如果你仔細想想,甚至使用'http'-schemed URL本身就意味着使用TCP。沒有標準的「尋址」Unix套接字HTTP服務器的方法。 – Dolda2000