看完了 W. Richard Stevens 的傳世經(jīng)典《UNIX 網(wǎng)絡(luò)編程》, 能照著例子用 Sockets API 編寫 echo 服務(wù), 卻仍然對(duì)稍微復(fù)雜一點(diǎn)的網(wǎng)絡(luò)編程任務(wù)感到無(wú)從下手? 書中示例代碼把業(yè)務(wù)邏輯和 Sockets 調(diào)用混在一起,似乎不利于將來(lái)擴(kuò)展?- 程序在本機(jī)測(cè)試正常,放到網(wǎng)絡(luò)運(yùn)行上就經(jīng)常出現(xiàn)數(shù)據(jù)收不全的情況?
- TCP 協(xié)議真的有所謂的“粘包問(wèn)題”嗎?該如何設(shè)計(jì)打包拆包的協(xié)議?又該如何編碼實(shí)現(xiàn)才不會(huì)掉到陷阱里?
- 帶外數(shù)據(jù)(OOB)、信號(hào)驅(qū)動(dòng)IO這些高級(jí)特性到底有沒(méi)有用?
- 網(wǎng)絡(luò)協(xié)議格式該怎么設(shè)計(jì)?發(fā)送 C struct 會(huì)有對(duì)齊方面的問(wèn)題嗎?對(duì)方不用 C/C++ 怎么通信? 將來(lái)服務(wù)端軟件升級(jí),需要在協(xié)議中增加一個(gè)字段,現(xiàn)有的客戶端就必須強(qiáng)制升級(jí)?
- 要處理幾千上萬(wàn)的并發(fā)連接,似乎書上講的傳統(tǒng) fork() 模型應(yīng)付不過(guò)來(lái),該用哪種并發(fā)模型呢? 試試 select、poll、epoll 這種 IO 復(fù)用模型吧,又感覺非阻塞IO陷阱重重,怎么程序的 CPU 使用率一直是100%?
- 要不改用現(xiàn)成的 libevent 網(wǎng)絡(luò)庫(kù)吧,怎么查詢一下數(shù)據(jù)庫(kù)就把其他連接上的請(qǐng)求給耽誤了? 再用個(gè)線程池吧。萬(wàn)一發(fā)回響應(yīng)的時(shí)候?qū)Ψ揭呀?jīng)斷開連接了怎么辦?會(huì)不會(huì)串話?
- 讀過(guò)《UNIX 環(huán)境高級(jí)編程》,想用多線程來(lái)發(fā)揮多核 CPU 的效率, 但對(duì)程序該用哪種多線程模型感到一頭霧水? 有沒(méi)有值得推薦的適用面廣的多線程 IO 模型? 互斥器、條件變量、讀寫鎖、信號(hào)量這些底層同步原語(yǔ)哪些該用哪些不該用? 有沒(méi)有更高級(jí)的同步設(shè)施能簡(jiǎn)化開發(fā)? 《UNIX 網(wǎng)絡(luò)編程(第二卷)》介紹的那些琳瑯滿目的IPC機(jī)制到底用哪個(gè)才能兼顧開發(fā)效率與可伸縮性?
網(wǎng)絡(luò)編程和多線程編程的基礎(chǔ)打得差不多,開始實(shí)際做項(xiàng)目了,更多問(wèn)題撲面而來(lái):- 網(wǎng)上聽人說(shuō)服務(wù)端開發(fā)要做到 7x24 運(yùn)行,為了防止內(nèi)存碎片連動(dòng)態(tài)內(nèi)存分配都不能用, 那豈不是連 C++ STL 也一并禁用了?硬件的可靠性高到值得去這么做嗎?
- 傳聞服務(wù)端開發(fā)主要通過(guò)日志來(lái)查錯(cuò),那么日志里該寫些什么?日志是寫給誰(shuí)看的?怎樣寫日志才不會(huì)影響性能?
- 分布式系統(tǒng)跟單機(jī)多進(jìn)程到底有什么本質(zhì)區(qū)別?心跳協(xié)議為什么是必須的,該如何實(shí)現(xiàn)?
- C++ 的大型工程該如何管理?庫(kù)的接口如何設(shè)計(jì)才能保證升級(jí)的時(shí)候不破壞二進(jìn)制兼容性?
這本《Linux 多線程服務(wù)端編程》中,作者憑借多年的工程實(shí)踐經(jīng)驗(yàn)試圖解答以上疑問(wèn)。當(dāng)然,內(nèi)容還遠(yuǎn)不止這些……
本書配套頁(yè)面: http://chenshuo.com/book ,將不定期更新。