linux平台下網路編程晉級

來源:互聯網
上載者:User

  工作中負責開發過資料轉送通用模組,跟隨者c++大牛們快速成長,本文分享一些心得。

1.基本的概念

  建立tcp串連三向交握、斷開tcp串連四次握手,這兩個概念請自己google

2.錯誤排查工具:

  1).netstat -anp |grep your's port:

    此命令用於查看linux下你的連接埠的狀態,通過它可以觀察到串連是否建立、是否正常(狀態是established、收發棧為空白或者持續變化)、是否關閉伺服器的防火牆(經常會遇到機器的防火牆沒有stop,然後請求串連狀態處於sys send的狀態)。

  2).查看連接埠資料流通情況的神器tcpdump

    基本用法請自行google,學會幾個關鍵點:怎麼看一個包是push包還是answer包、能夠簡單的分析網路連接的狀態、儲存abc.pcap檔案然後可以在windows平台上用wirshark分析位元組(這點必須掌握,通常會抓包看資料轉送是否正常);

  3).基本步驟:

    先用1)查看網路連接是否正常,如果1)排查不出來,請用2)抓包分析;並且詳細審查你的代碼,邏輯不錯為根本。

3.程式模型:

  說起網路編程,肯定離不開的另一個話題就是多線程,真實的情境下,幾乎都是並行收發處理資料,所以程式的模型至關重要。好的程式模型,不僅可以從效能上大大提高處理速度,而且能縮短研發周期。

  在思考模型的時候主要考慮的點是:

  1).IO的類型是nio還是bio,不同的類型決定了不同的執行緒模式

    bio對應於一個線程一個串連,那麼當串連數量很多的時候(每個串連內部最好有自己的緩衝記憶體塊,也有公用的一塊大記憶體的,但是得用讀寫鎖去處理資料出入的問題,而且串連過多的時候,就算是讀寫鎖也未必能達到要求,所以多花點記憶體是值得的),要一個消費線程管理好幾個串連推送過來的資料

    nio則把接收的資料拷貝先拷貝給一個分發線程,然後此分發線程將資料均衡的分配給n個消費線程,用並行化去提高處理速率

  2).tcp串連的數量、每個串連的有效期間、每個串連的資料量

    這些是決定使用哪類IO的重要依據,如果是長串連並且資料即時性要求高、資料量大,則bio;如果串連數量特別多(500+),則選擇nio。

  3).學會畫模型圖,寫好設計文檔,類間的隊列不應該暴露出來(持有對象引用,調用相應的方法去push/pop元素)

  4).在關鍵的地方要替換掉鎖,一種鎖的替換思路請參考我的這篇bloghttp://www.cnblogs.com/uttu/archive/2013/02/07/2908685.html在幾個邏輯重要點部分    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.