2011-02-04 49 views
0

我還在開始與Lua,並想寫一個(相對)簡單的代理使用它。使用Lua編寫Proxy/Caching服務器!

這是我想到達:

  1. 偵聽端口。
  2. 接受連接。
  3. 由於這是一個代理,我期待HTTP(Get/Post等)/ HTTPS/FTP /來自我的瀏覽器的任何請求。
  4. 檢查請求(僅提取主機和端口信息?)
  5. 創建一個新的套接字並連接到請求中指定的主機。
  6. 傳遞確切的請求,因爲它收到,與POST數據和所有。
  7. 接收響應(標題/正文/其他任何內容..)並響應初始請求。
  8. 關閉連接?我認爲Keep-Alive不應該得到尊重?

我意識到這不應該是微不足道的,但我有很多麻煩設置使用LuaSockets或Copas - 如何接收整個請求?繼續接收,直到我掃描\ r \ n \ r \ n?那我該如何提取發佈數據?和身體?或接受「下載」文件?我讀到了有關「匯」的信息,但是我承認這些信息大部分都不理解,所以或許我應該閱讀更多內容。

萬一它很重要,我正在使用LuaForWindows在windows計算機上工作,而我對Lua還是比較新的。儘管如此,雖然表很簡單:)

我發現lua-http,但它似乎已經合併到Xavante(我沒有找到任何版本的lua 5.1和LuaForWindows),不知道它是否它讓我的生活更輕鬆?

預先感謝任何提示,指針庫/源我應該看等:)

回答

0

不那麼容易,因爲你可能認爲。代理請求和服務器請求是不同的。在rfc2616中,您可以看到,在查詢代理時,客戶端會包含請求文檔的絕對URL,而不是通常的相對路徑。

因此,作爲代理,您必須解析輸入請求,修改它們,查詢相應的服務器並返回響應。

因爲身體長度取決於各種參數(方法,內容編碼等),解析輸入請求相當複雜。

+0

你說得對,謝謝你指出,我沒有想到它是誠實的,但我仍然不確定如何繼續?要仔細看看lua-http-parser,但我確實希望能夠更輕鬆地編寫代碼:「獲取請求+所有數據 - >轉發,接收響應+數據 - >轉發」 – Cyclonus 2011-02-04 14:25:55

+0

一旦您能夠解析請求,你完成了很多。 – 2011-02-04 15:30:27