我一直堅持一個觀點,從web體系學習服務器端程序設計,web作為發展最早也是前景最廣闊的internet模型,幾乎支撐了網絡世界一半以上的應用,其他email ftp等傳統應用雖然產生時間也很早但幾乎都很沒落,只有web風采依舊,蓬勃發展,從apache到lighttp到nginx等,一個接一個高性能的web服務器程序分別被開發出來,上層應用cgi, isapi(nsapi), fastcgi助力,html協議也在不斷發展,html5也要登堂亮相,各種腳本語言爭相斗艷,python、php、java、asp.net等。web應用支持了目前最大規模的數據google,支持了最大量用戶的訪問,因此各種存儲、云計算等都是首先在web領域獲得應用,可以說web就是it領域的創新源泉,看下apache下面有多少項目就可見一般。web體系可謂博大精深,從web體系學習服務器端程序設計是學無止境的,從nginx等服務器程序設計上可學習server程序如何分塊、如何高效,從isapi/nsapi模型上可學習如何用進程內模塊擴展應用,從fastcgi可學習如何用進程外模塊擴展應用,從各種cache方案中可學習如何為server端提速,從各種腳本應用上可學習如何為server端程序二次開發助力,web是源泉,web的各種這方式幾乎概括了server端程序的各種架構模型。當然一般自定義協議服務器和web還是有些地方不同的,最顯著的區別一般也就在于協議不一樣,另外就是web是無狀態一般不保持連接,因此web需要傳遞各種session等維持狀態的數據,總之從web可學習的地方實在是太多。
簡單類比下web領域開發和一般server的擴展
nginx模塊/apache模塊 server程序+plugin
cgi fork子進程
fastcgi server proxy模式,由于fastcgi可網絡方式部署,所以很容易在一個局域網內部實現一個ioserver+N logicserver模型
簡單類比就可知道,如果一個server程序只要能很方便的支持plugin+fastcgi就可適應幾乎所有各種需求,可惜的是一般的server程序幾乎都不支持這兩個模式的擴展,大多數gameserver只支持lua等腳本,說實在的,支持個腳本跟支持fastcgi和plugin模塊相比還是差很多,如果支持fastcgi或者plugin只要做個plugin就支持lua了。