網路編程需要先從底層Unix網路編程學起嗎?
01-23
最近讀了一點點陳碩的《Linux多線程伺服器端編程》,有了一點疑惑。
是像書中附錄寫得建議那樣先從底層的基礎Unix網路編程,TCP/IP學起嗎?還是說可以先學一些成熟的庫或者框架像Netty, Twisted,Boost.Asio之類的,找一個先用起來解決解決實際項目問題,編了一陣有了感覺再回去好好夯實基礎呢?另外,陳碩這本書寫的太好了,感謝。
附:工作中是用C++, C#的,讀了陳碩的《Linux多線程伺服器端編程》,對網路編程有了興趣,開始學了起來,這兩天把python的基本語法大致看了一下,準備先用Twisted下手學學文檔寫個小程序。如果基礎真的應該先學的話,我就先去面壁讀那本《Unix網路編程》好了。。。。還有《TCP/IP詳解》。。。。總的來說,就是想編一個簡單的桌面遊戲的伺服器在Unix端,客戶端在Windows用WPF去做(不知道通信的話可以用WCF嗎?),客戶端以後還可以做到iOS上。
學習不需要啊,但是以你這種目標,這個坎是繞不過去的吧,或早或晚總要學的。
目前還沒有很好的代替socket的網路通訊技術。但socket本身又是個麻煩的技術,用UDP需要考慮包序錯亂的問題,用TCP需要對流進行拆分。大的層面上,socket到可用的actor模型,中間需要做的還是蠻多的,實現難度也很大。目前沒有被廣泛認可的框架,多數情況下大家都在造自己的輪子。
我覺得學這東西,可能還是要從兩方面入手,學框架不忘學習一下socket。學socket最好的書當然是《UNIX網路編程》。至於《TCP/IP詳解》,可以慢慢看,不讀也不會限制你學習網路編程。像Netty、Twisted這種基於Java或者python等高級語言的庫容易上手,但是封裝的細節過多,往後就很難深入。
最近在看《Netty權威指南》時就有疑惑,究竟有多少Java程序員能真正理解幾種IO模型。因為他們的業務大多偏離底層。長遠來看,感覺還是先從C入手網路編程比較靠譜,以後用別的語言幾乎沒有太多障礙。陳碩大神的那本關於muduo的網路編程的書,水平太高,而且很多工程化的設計思想和理念,新手或者沒有相關經驗的讀者,可能很難理解。如果是毫無網路編程經驗或者網路編程經驗少的可以閱讀一下韓國人寫的那本《Tcp/IP網路編程》,如果是專門搞伺服器端網路編程或者是中級以上水平想進一步的話,可以閱讀游雙的《高性能伺服器編程》,書可能買不到了,需要電子的書可以私信我。當然,歡迎關注我的csdn博客,裡面有系統性的網路編程專欄,也有完整的網路相關的開源項目源碼分析實戰:左雪菲的專欄 - CSDN博客。
有時間還是把APUE,UNP,TCP/IP看看,在學校看的現在工作了,都當飯吃了。。。。。
unix網路編程1看不懂啊,所以來到知乎看看大神門如何開始的
Windows程序員,怎麼學網路編程呢? 也從Unix開始嘛,從沒用過除windows的系統。
推薦閱讀:
※如何理解《Unix 編程藝術》中所說,「提供機制,而不是策略」?
※fish比zsh好用嗎?
※什麼環境最適合學習 UNIX ?
※為什麼提到OS X優勢和Windows劣勢的時候都要大說特說Unix血統?
※如何評價王垠的文章《unix的缺陷》?