2
如何使用HTTPServer
(或其他某個類)來設置偵聽文件系統套接字而不是實際網絡套接字的HTTP服務器?通過「文件系統插座」我的意思是AF_UNIX
類型的插座。設置偵聽文件套接字的HTTP服務器
如何使用HTTPServer
(或其他某個類)來設置偵聽文件系統套接字而不是實際網絡套接字的HTTP服務器?通過「文件系統插座」我的意思是AF_UNIX
類型的插座。設置偵聽文件套接字的HTTP服務器
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服務器。
我很驚訝http服務器的設計與網絡套接字想法緊密結合,而不是簡單的阻塞流,它可能是一個底下的套接字。這似乎是一個糟糕的設計。是否沒有獨立於HTTP請求源的標準HTTP解析庫? – user3286380
如果您認爲HTTP基礎架構的其他部分與TCP機制緊密結合,這並不是很奇怪。例如,CGI環境被指定爲包含具有「服務器端口」的變量,記錄器經常使用IP地址等等。我可以在一個層面上認爲它有點難看,但是看到HTTP在實踐中幾乎只用於TCP,這種約定的出現並不是非常意外。 – Dolda2000
如果你仔細想想,甚至使用'http'-schemed URL本身就意味着使用TCP。沒有標準的「尋址」Unix套接字HTTP服務器的方法。 – Dolda2000