《親手打造 網際網路四大服務》

王家俊 著   侯俊傑總監

jcwang.jpg (24370 bytes)

 答客問


基本資料

書名:親手打造 網際網路四大服務
作者:王家俊
總監:侯俊傑
出版:眳p,1998.05
ISBN: 957-566-277-6
頁數: 5 章,310 頁
定價:NT$ 560.0

 

侯俊傑序

初次見到家俊,是在他大三那年。當時台大資訊系學會為了對我做一篇專訪以為資訊週特刊之用,由系學會派出三位「記者」訪問我。家俊是其中一位,談吐留給我極深的印象。

爾後數年,我在台大資訊系的「資訊生涯前瞻營」中給了數次演講,每次都看到他的出現。漸次知道他考上了研究所、專攻 Internet 研究、做了一個網站、到國外發表了兩篇論文、在軟體公司當了技術顧問...而我下筆的此刻,他還只是一位即將畢業的研究所二年級學生。每次與他談話,都可以感受他那洋溢的活力,積極的青春。我曾稱讚他是一個行動力很強的人。

1997 年初,我企圖將我所認識的幾位年輕優秀的朋友組合起來,各自在他們的專長領域中撰寫一本書籍。成員之中包括家俊。這個企劃最後因為大家過於忙碌,或心有餘而力不足,或力有餘而心不足,幾乎全部停頓下來,無疾而終。唯有李書良先生翻譯的 Windows 95 : A Developer's Guide(中譯名為 Windows 95 程式設計指南/眳p/1997)和家俊的這本「親手打造 w 網際網路四大服務」得竟全功。在比任何同儕都忙碌的日子中,家俊又再一次展現了驚人的行動力。

家俊的 Create! 網站從 1996 年開始就實驗性地提供一種未來工作模式所需要的資訊服務。這種「未來的工作模式」簡言之就是,社會上將出現一大批在家上班的人(SOHO 族),透過網路共同創造出社會所需要的各種價值;公司不再必然與辦公大樓或辦公室產生關係,都市化衍生的許多病態也將因此稍為緩和。為了讓網站所提供的服務能夠隨心所欲,Create! 網站上的所有資訊服務都由家俊一手設計,也因此他對於親手打造網際網路伺服器這件事情,累積了相當豐富的經驗。又因為他對於創思與發表有很大的興趣,終於成就本書。

我在家俊身上看到積極進取的光彩,這是我深以為許多年輕朋友可以學習的地方。

談談這本書。在作者自序以及第0章(導讀)之中,已經對本書主題做了剴切的描述,我不再贅言。這裡我想說的是本書的表現方式。關於技術性程式設計的電腦書籍,基本上我們大略可以把作者分為兩種,一種是 "a programmer who writes a book",另一種是 "a writer who programming"。前者質勝於文,後者文勝於質。就本書而言,家俊畢竟還是工程味多些,比較偏向質勝於文的那一型。是的,他的技術實力很好,程式也乾淨漂亮,而書中大部份時候就是給你一大堆心血結晶,再平鋪直述地一段一段解釋給你聽。你必須擁有一定的技術基礎,才能直接切入他的核心思考。

在電腦技術寫作領域裡,文質彬彬的人非常難求,而且需要時間的淬鍊。質勝於文,已經保證了本書在技術面上一定程度的品質。有些人對於「書內有許多程式碼」的書籍不以為然,我可不這樣認為!如果程式碼的呈現,為讀者帶來方便,或如果書籍的目的就是要以實作帶領讀者、以實作的講解做為內容的主軸,那麼詳盡的程式列表是有必要的。

家俊在大四時開始發展的 "UniBase Network Programming Framework" 最近被 CMP Net TechWeb News 選為六大 source-code free 軟體之一,並列的有歷史悠久名聞全球的 LinuxFreeBSDGNU C/EmacsApache…UniBase 就是本書各伺服器軟體的前身,目前的用戶包括 AT&TIBMXerox 實驗室,用以快速發展 C++ 之下的 socket 軟體。從這一點可以想見本書在技術層面上的高水平。

本書假設讀者有下列基礎:C/C++Windows console mode programmingsocket(乃至WinSockprogrammingmultithreaded programming。其中關於socket 程式觀念,書中有一些介紹,堪稱夠用。如果你沒有上述基礎,恐怕得自行補足,才能接受這本書。

身為本書總監,我對全書的每一字、每一句都做了詳細的閱讀與修潤,並附加了大約十數幅圖片的補充。這些補充圖片多用來示意程式邏輯中的重要動作,可以讓你在一頭埋進大量程式碼之前,先有一個大局觀。

希望你會喜歡這本書。我確信,只要好好 trace 書內的程式碼,你將獲益匪淺。我自己也從本書提供的極為實用的技術中得到許多收獲。

侯俊傑 1998.04.26 于新竹

 

王家俊自序

回憶自己在網際網路風行的這三四年,買電腦書的次數已經趨近於零。平時難得到書店逛一逛,只有看到什麼新的經典之作出版,才會替自己的書架多添一名新成員。要找到一本值得收藏的中文電腦書目前已經成為一件滿困難的事,情況就如某次逛書店時巧遇的一位資訊人所說,大家都在寫一些給秘書人員用的工具軟體使用手冊,或是讓一些連程式設計都還不熟悉的大學生草率地翻譯國外技術書籍,真正有心研究軟體設計技術的書愈來愈乏善可陳。

抱怨歸抱怨,我們既然知道問題存在,知道環境不完美,自己就應該努力貢獻自己的一點力量,為大環境做一點事。但是話說回來,滿肚子的系統設計經驗,若不是遇到用心的出版企劃,常常不會得到像暢銷作者一般的創作資源,更別談能有一個好的包裝,讓有需要的讀者能真正享受書的內容,感受作者的理念。

這本書能完成,絕對要感謝國內電腦技術書籍的播種者侯俊傑侯大哥的信任與授權,讓我能夠在一個好的創作環境中,將自己的所知所學,和過去一路走來所得到的經驗,細細地整理成書,與你分享。同時我也要說,一個願意推動技術書籍而不是以銷售量為第一考量的出版社是了不起的。國內需要多一點這樣用心出書,有理念有理想的企劃,我們的資訊出版才會真的有營養。

這本書的理念很簡單,就是要寫一本足以領先世界的中文電腦書,帶領讀者走入一個奇妙的領域,迅速深探網路程式設計技術的奧妙,讓想掌握網路伺服器設計的同好真正能有一個理想的進入點。截至本書交付印製為止,全球尚未有一本廣泛針對網際網路商用伺服器程式設計之相關書籍出現。本書算是實現了我最初的一點野心,讓台灣的作者也有領先世界風潮的一刻。如果這本書能真正幫助你在工作或自我探索的過程中,少跌幾次跤,那麼我的另一個願望也算是圓滿達成。

寫作理念

只要你想單純以 C++ 物件設計經驗的技術背景做為起點,創作一些有個人特色的網路伺服器,並希望能對骨架脈絡掌握得一清二楚,並且你也常常在網際網路上使用各種服務,那麼這本書就是為你而寫。

本書內容以實用的網路設計技術為主,不談高深的理論架構,不講做不到的規格或寫不出的設計。這與我在研究所做研究時,時時追求「理論上的完備性」的背景與習慣相差很大。但是要能在一本書中,掌握三四種主流伺服器的設計理念,我們必須犧牲理論上的探討,把它們留做有待你自己發掘自己探討的成長方向。在各個章節的適當地方,我會介紹一些網址,你可以從中獲得詳細的參考資料。若再搭配坊間許多網路理論或架構的書本,我想,只要你有一顆熱烈的求知心,要落實「理論與實務並重」應該不是難事。我相信這樣的處理,會使你所獲得的網際網路系統觀念,比讀完一堆網路理論書籍還要詳盡。

既然是以設計實務為主,我將著重跨平台程式介面的介紹、網路輔助工具的使用、網路程式的除錯技術、以及程式架構流線化的設計。我儘可能採用標準程式介面,避免使用受限於系統平台的技巧。所以你不會看到書中使用 MFC OWL 類別庫。但如果你要讓程式完全發揮作業平台的特色,並且如果你有能力善用物件包裝的特性,你也可以將特定的系統呼叫藏在一致性的C++ 類別介面下。一旦面臨跨平台的需要時,只要依照規格改寫某幾個類別即可。本書所設計的伺服器(完整附於書後光碟),在標準規定的條件之下,可能是相同平台上全球執行效率最高的跨平台伺服器。即使其中有些瓶頸,本書內容也足夠讓你獨力指出並修改效能不足的地方,將這些伺服器依個人環境的需求進行最佳化改善。

有時候我自己也吶悶,像這樣的書早該問世了,為什麼到現在我們看到的都還是一些敘述如何利用別人的軟體來架設網站的書呢?說到網路程式設計,一般的書又只敘述一些結構簡單的用戶端程式,或是 FTPTELNET 等次主流的伺服器設計技巧。根據我的經驗,以及與業界工程師聊天的結果,認為一本書若能直接切入 WWWemailnews 等主流伺服器的設計,其實可以加速工程師的學習過程。需求確實存在,但為什麼沒有相對的供給?

不管你推論出來的原因是什麼,我都希望這本書能率先提供一些你最需要的伺服器設計經驗與能力。本書所有的程式碼都開放使用權,你可以轉用在你的專案之中,不必有任何著作權方面的顧慮。只要你買了這本書,你就有權使用所有的原始碼。當然,如果你能夠把我的名字列為你的軟體共同作者之一,或是將你的產品寄一份給我使用,我會覺得很欣慰。

網際設計的未來

我今年(1998)將自研究所碩士班畢業,隨即將進入軍隊服務兩年,盡一份中華男兒對國家的責任!呵呵,我的資訊生涯將就此中斷兩年,應該是很確定的事實。

未來的世界很可能是個資訊世界,至少大家都這麼認為。至於什麼是資訊世界,什麼是資訊社會,我們可能各有各的猜想。

我自己常常認為,也常常向別人這麼推銷,未來的世界將是一個創意的世界,是一個專才的世界。不管人文藝術或科學技術,每一位專才都應該以自己的專業領域為基地,在其中成為權威,成為該專門領域中的世界第一把交椅。人們將無法依賴公司規模,無法倚仗過去的成就來鞏固自己的地位。每一個人必須有能力獨立自主地掌握專業,然後在全球網狀組織中,找到自己的同僚,相互搭配支援,成為一個動態而且有威力的綜合體。在那裡,大家天天想的就是理念、理念、理念創意、創意、創意;大家想的是如何實現理想,如何對社會造成正面而深刻的衝擊。

這個綜合體的脈絡就建構在網際網路之上。今天所有的主流服務,如 WWWemailnews,都將是明日凝聚大家力量的關鍵技術。只要功夫下得深,並常常激發新的服務組合創意,你真的很有機會成為明日的關鍵人物。這當然也是我對自己的一點期許。

這一本書的理念,以及書中程式的嚴謹態度,都希望讓你感受到我對於專業工作者及其專業精神的尊崇。

許多人說,台灣資訊軟體業將在這幾年起飛。希望你我都能在其中尋得自我一片天空,對社會造成正面的衝擊,帶來無窮的貢獻。

王家俊 於民國八十六年六月二十五日
jcwang@csie.ntu.edu.tw




目錄

第零章 全書導讀 / 017

第一章 / 001

1.1 網際網路包含了什麼服務 / 002/ 011

1.2 TCP / IP 簡介 / 015

第二章 Hello, TCP / IP / 025

2.1 校正你的網路執行環境 / 026

2.2 創作你的第一個網路伺服器 / 029

2.3 多緒程式設計(multi-threaded programming/ 041

2.4 伺服器基礎架構(Hello, TCP/IP! 的最終版本) / 061

2.5 系統架構回顧 / 074

第三章 創作自己的 WWW 伺服器 / 077

3.1 HTTP/1.0 入門 / 079

3.2 HTTP/1.0 實際運用 / 087

3.3 提供商業版本的功能 / 101

3.4 系統架構回顧 / 144

第四章 網際網路上的電子郵差 / 147

4.1 電子郵件收件:POP3 服務 / 150

4.2 電子郵件送發:SMTP 服務 / 171

4.3 SMTP 郵件之儲存設計 / 187

4.4 又見 POP3:用戶取信管理 / 206

4.5 系統架構回顧 / 219

第五章 網際網路群體服務 / 221

5.1 NNTP 網路新聞傳輸協定 / 223

5.2 整合 UniMaild UniNewsd / 236

5.3 Email 功能整合到 UniNewsd / 268

5.4 系統架構回顧 / 271

附錄 A Internet Drafts Request For Comments (RFC) / 275

附錄 B 相關參考書籍 / 277

附錄 C 21 世紀資訊工程之轉型 / 279

附錄 D 決戰 ACM -- 中國人首度揚眉國際資訊大賽 / 289

附錄 E 軟體專案自己來 -- 業餘程式師打工須知 / 297

附錄 F UniBase的榮譽 / 303