學習C++伺服器端開發需要學習什麼知識?


看書百遍不如自己寫一遍,
動動手,實現以下代碼,基本上就很靠譜了,按數序來 ---

1. 實現最簡單的、單獨一次連接的tcp伺服器,直接socket bind, listen, accept搞定。
客戶端不用寫,先用 telnet直接連你的server測驗。

2. 實現簡單的tcp客戶端,代替第1步使用的telnet,實現和你的伺服器的通訊。

3. 改寫第一步的簡單伺服器,採用fork方式,多進程條件下,實現多客戶端的支持。

4. 改寫第一步的簡單伺服器,用select的方式,單進程條件下,實現多客戶端的支持。
調試這個程序,你可能會遇到點挫折,努力一下!

5. 實現一個簡單的udp伺服器和客戶端。有了tcp的經驗,udp應該很容易做。

6. 將第5步實現的程序,整合到第4步的select程序中。
這樣你可以用單進程同時實現tcp和udp伺服器了。

7. 進一步有興趣,嘗試google下,比select更好的非同步socket方案,例如epoll等。windows和linux下都有更快速的替代方案。這一步不影響整體認識,先跳過。

8. 有了上面的鋪墊,用C寫伺服器,已經沒有問題了。
問題是別人已經做的足夠好,現成的拿來主義,用libuv改寫下你的伺服器代碼吧。
(有現成的可用,為什麼要步驟1~7呢?哈哈,別問我。。)

以上只是C還沒說到C++,
C++有若干晦澀難以調試或整合的庫,除非項目已經用了這些庫,
學習他們似乎沒有太大的優勢和必要。


先說,為什麼你認為你的伺服器適合用C++來寫?


直接實戰, 需要什麼學什麼
比如: 看boost.asio
需要學的點
1. 怎麼下boost
2. 怎麼安裝boost
3. C++模板
....


伺服器端開發範圍很大,但無論哪個方向,有四個方面是必須要掌握的。

  • 開發語言。按你描述的也就是C++,可能還要學習更多。
  • 操作系統。Linux/Windows的日常操作,內存管理、多線程等系統編程知識。
  • 網路。主要是TCP/IP協議族,從原理到應用。
  • 資料庫。從操作到開發。

除此之外,還有各種領域知識。
這些方面好像看起來很龐雜籠統,但伺服器開發就是這樣的,要深入下去,是個年深日久的活兒。各人有各人的學習方式,不要半途而廢、淺嘗輒止就好。


啥平台,你C++什麼水平都不說別人沒法推薦的。
先用C++寫點小項目,就控制台列印輸出的,讀取文件的,能不看別人的代碼照著自己的思路寫出來的時候再說吧。
等你這些搞完了就不用問別人該學啥了,你自己就知道該學啥了。
編程是為了解決問題的,你帶著問題去學才是正確的,而不是給自己定個模糊的目標然後去看書看視頻。


《unix網路編程》《unix環境高級編程》《tcp/ip詳解卷一》看這三本就夠了


/* 想起若干年前的一個梗,轉來自某乎的一匿名用戶 */
小明是一個擼網頁的,終於有一天他受夠了裸寫c/c++ cgi或者一些奇怪的都是括弧的語言。
於是他打算擼一套庫出來。
於是他寫了一套網路庫,字元串,線程池,資料庫之類的一大堆東西。
然後他發現他還是在愚蠢地花樣拼接字元串。
於是他想為什麼我們要在代碼裡面嵌入字元串,而不是在字元串裡面嵌入代碼呢?
於是他仿照c的風格寫了一套腳本語言,於是他發現他寫出了一個PHP。
所以PHP是最好的語言


IOCP是個不錯的入門途徑。


前陣子聽公司主程說過,有一個超級牛逼的大神,手寫2w行c++遊戲伺服器代碼,bug只有個位數。
現在看到c++也就只敢刷題玩了。。。


推薦閱讀:

一個深山老農如何才能藉助互聯網銷售農產品?
大家覺得繼華為、小米之後,中國下一個研發自主晶元的手機廠商會是哪一家?
有沒有遊戲主題的社交網站?
為什麼改了useragent為iphone後,還是說我不是手機瀏覽器?

TAG:互聯網 | 編程語言 | 編程 | 伺服器端開發 |