Linux高性能網絡編程
2011-08-20 14:10一、課程目標
本次課程深入講解Linux下的socket編程,并以此為基礎,著重討論如何提高網絡服務端應用的性能,通過本次課程的學習,學員將收獲以下方面的成果:
- 熟練使用socket系列函數進行網絡編程;
- 深刻理解服務端應用的性能要求;
- 利用Linux提供的各種機制,有效地解決服務端應用的性能瓶頸。
二、參訓要求
參加本次課程的學員須具備以下能力:
- 了解TCP/IP協議,有網絡編程概念。
- 本次課程使用 C語言 教學,所以學員需擁有較好的C語言基礎;
- 能熟練使用常用的Linux命令;
- 能熟練使用gcc、gdb、熟練撰寫makefile;
- 最好熟練使用vi、emacs等文本編輯器其中的一種。
三、課程實踐環境
- 學員自備電腦
- 操作系統:GNU/Linux 2.6+(建議使用Redhat AS 5+或Ubuntu、Fedora)
- 編譯器:GCC v4.1+、GDB v7.0+
- 可選IDE:Eclipse CDT
四、課程大綱
本次課程由以下幾個部分構成:
1、POSIX Thread - 多線程
- 線程管理
?
- 線程創建:pthread_create()
- 線程終止:pthread_exit()
- 線程連接和分離:join and detach
- 線程同步機制
?
- 互斥體:mutex
- 讀寫鎖:read-write lock
- 條件變量:condition variable
- 線程屬性控制
- mutex屬性控制
2、Socket 簡介
- Socket地址數據結構:struct sockaddr,struct sockaddr_in
- 字節序以及字節序操作:ntohl(), ntohs(), htonl(), htons()
- Internet地址操作:inet_aton(), inet_addr(), and inet_ntoa(), inet_pton(), inet_ntop()
3、TCP Socket
- socket():創建socket
- bind():綁定地址
- listen():開始偵聽
- accept():接受來自客戶端的連接
- connect():連接到服務器
- getsockname()和getpeername():獲取本地和對端地址
- I/O 操作:read(), write()
- 更高效的I/O 操作:readv(), writev()
- TCP Server編程步驟
- TCP Server v1:迭代式Echo Server
- TCP Server v2:多進程并發式Echo Server,使用fork()和exec*()
- TCP Server v3:多線程并發式Echo Server,使用pthread
- TCP Client編程步驟
- TCP Client:Echo Client
4、UDP Socket
- recvfrom()和sendto():收發UDP數據報
- UDP Echo Server
- UDP Echo Client
- 組播(Multicast)和廣播(Broadcast)
5、Socket Options和 IP Options
- 常用的Socket Options
- 常用的IP Options
- Socket選項和IP選項對網絡應用的影響
6、I/O多路復用:構建反應式(Reactive)網絡應用
- UNIX I/O多路復用機制概要
- 為什么I/O 多路復用對于網絡應用很重要
- I/O 多路復用與多線程(反應式模型和并發模型)
- select / poll
- 在TCP Server和UDP Server中使用select和poll
- Linux特有I/O 多路復用機制:Event poll (epoll)
- 在TCP Server和UDP Server中使用epoll
7、異步I/O:構建前攝式(Proactive)網絡應用
- 相關概念:同步I/O和異步I/O、Proactor模式
- 異步I/O 是如何提高I/O 性能的
- 異步I/O系列操作
- 使用異步I/O的機制構建TCP Server
8、高性能網絡編程討論
- 考究高性能網絡編程中應該遵循的原則,討論并發、同步、事件多路分離等機制的適用場合
- 網絡應用的瓶頸何在
- 事件多路分離 vs 一連接一線程 (Event demultiplexing vs One thread per connection)
- 同步I/O vs 異步I/O (Synchronous I/O vs Asynchronous I/O)
- 如何適當地使用多線程
- 什么時候需要多個 事件多路分離線程
9、應用層協議定義與實現
- 為什么要自定義應用層協議
- 定義應用層協議 (以XMMEP協議為例)
- 用C++實現自定義的協議 (以XMMEP協議為例)
注:XMMEP為X-Messenger Message Exchanging Protocol
五、時間安排
課程時間:2天,以每天6小時計,具體安排如下:
- Day1
?
- 1 - POSIX Thread - 多線程
- 2 - Socket 簡介
- 3 - TCP Socket
- 4 - UDP Socket
- 5 - Socket Options和 IP Options
- Day2
?
- 6 - I/O多路復用:構建反應式(Reactive)網絡應用
- 7 - 異步I/O:構建前攝式(Proactive)網絡應用
- 8 - 高性能網絡編程討論
- 9 - 應用層協議定義與實現
- 課程回顧與總結
六、課程資源
????? 可獲取的課程資源見: 教學資源 。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
