1. 程式人生 > >屬於自己的完美web服務器完成

屬於自己的完美web服務器完成

data 單線程 mod 要求 現在 報文 .tar.gz 友好 線程

由於對lua語言非常喜歡,加上工作是做web開發,所以一直在關註lua的web服務器項目,包括xavante、aLiLua、openresty、tengine等
xavante是我最早接觸到的,當時還沒有阻塞這個概念,現在知道它是阻塞的,在lua單線程下使用會有性能問題,而且沒有文件上傳、websocket等功能。
aLiLua、openresty都是非阻塞的,aLiLua名字帶個ali最初被我誤以為是阿裏的項目,其實是個私人項目,網站已經不能訪問了,支持websocket,但是不支持文件上傳。
openresty比較出名,社區很活躍,通過擴展既支持文件上傳也支持websockt。但是有一點不滿足我的需求,它基於nginx的,nginx的多進程架構使得它沒有傳統java服務器那樣上下文的概念,不支持常駐內存的數據和代碼,意味著在lua代碼裏面定義一個全局變量,不能在下次請求的時候使用它,因為它有可能被銷毀了,下一次請求可能是別的進程處理的,這也直接導致了openresty的websocket實現不能主動推消息給客戶端,只能通過消息訂閱等不友好的方法來推送消息給客戶端,雖然很強大,但是我只能放棄。
tengine是阿裏的項目,也是基於nginx,類似openresty,了解得不多,也不滿足我的要求。
最近學了一些http協議相關的知識,就想自己來實現文件上傳和websocket報文的解析,終於磨刀霍霍,把它寫完了。由於是個人項目,沒經過嚴格測試,bug肯定不少,這個在以後使用中慢慢調優。這些功能都是基於luvit項目之上開發的,不然要自己寫完整的http服務器太浪費時間。
目前這個基於luvit的二次開發服務器已經包含了我所需要的所有功能:Cookie解析和設置,session會話,基於If-Modified-Since請求頭的客戶端緩存機制,類似j2ee的過濾器實現,multipart/form-data報文解析(用於文件上傳),websocket報文解析。
下載地址:http://resource.omega.pw/software/lua/luv/luv-http-server.tar.gz

luvit項目介紹:
luvit項目是在luv項目的基礎上實現一套類似nodejs的庫,基本上實現了nodejs大部分api,但是nodejs是在不停更新的,luvit肯定追不上,項目地址:https://github.com/luvit/luvit
luv項目是lua對libuv庫的綁定,項目地址:https://github.com/luvit/luv

屬於自己的完美web服務器完成