一、網路程式設計
1、c/s vs b/s
(1)c/s架構
優點:a、由於客戶端實現與伺服器的直接相連,沒有中間環節,因此響應速度快;
b、操作介面漂亮、形式多樣,可以充分滿足客戶自身的個性化要求;
c、c/s結構的管理資訊系統具有較強的事務處理能力,能實現複雜的業務流程。
缺點:a、c/s結構的管理資訊系統具有較強的事務處理能力,能實現複雜的業務流程;
b、相容性差,對於不同的開發工具,具有較大的侷限性;若採用不同工具,需要重新改寫程式;
c、開發成本較高,需要具有一定專業水準的技術人員才能完成;
(2)b/s架構
優點:a、具有分布性特點,可以隨時隨地進行查詢、瀏覽等業務處理;
b、業務擴充套件簡單方便,通過增加網頁即可增加伺服器功能;
c、維護簡單方便,只需要改變網頁,即可實現所有使用者的同步更新;
d、開發簡單,共享性強。
缺點:a、表現要達到cs程式的程度需要花費不少精力;
b、在速度和安全性上需要花費巨大的設計成本,這是bs架構的最大問題。
2、套接字
作用:傳輸層的檔案描述符
3、tcp的c/s實現
(1)循壞伺服器模型
1)tcp伺服器實現過程
a、建立套接字:socket函式;
b、給套接字繫結ip位址和埠號:bind函式
第乙個引數:socket函式建立的套接字
第二個引數:儲存ip和埠號的結構體
a. 位元組序轉化
網路位元組序採用大端位元組序
位元組序轉化函式
b.ip位址格式轉化
第三個引數:第二個引數的長度
c、出現無法繫結?
解決辦法:setsockopt函式
d、將套接字檔案描述符,從主動變為被動檔案描述符(做監聽準備):listen函式
主動描述符可以主動的向對方傳送資料。
被動描述符只能被動的等別人主動想你發資料,然後再回答資料,不能主動的傳送資料。
為什麼要將「套接字檔案描述符」轉為被動描述符後,才能監聽連線?
e、被動監聽客戶的連線並響應:accept函式
f、伺服器呼叫read(recv)和write(send),收發資料,實現與客戶的通訊
send函式
recv函式
注意事項:
資料的傳送和接收,收發資料的資料需要在網路中傳輸,所以同樣要進行端序的轉換。
傳送資料:將主機端序轉為網路端序
接收資料:將網路端序轉為主機端序
int num = 0x12345678;
a - b 0x7853412
char*ptr = 「hello world」;
不過只有short、int、float等儲存單元位元組》1位元組的資料,才有轉換的需求。如果是char這種儲存單元為乙個位元組的資料,不需要對端序進行轉換。
g、呼叫close或者shutdown關閉tcp的連線
2)tcp客戶端的實現過程
a、用socket建立套接字檔案,指定使用tcp協議
b、呼叫connect主動向伺服器發起三次握手,進行連線
c、呼叫read(recv)和write(send)收發資料
d、呼叫close或者shutdown關閉連線
4、udp的c/s實現
(1)udp協議沒有建立連線特性,所以udp協議沒有自動記錄對方ip和埠的特點,每次傳送資料時,必須親自指定對方的ip和埠,只有這樣才能將資料傳送給對方。
(2)udp通訊過程
1)呼叫socket建立套接字檔案
2)bind繫結固定的ip和埠
3)呼叫sendto和recvfrom函式,傳送和接收資料
(3)廣播
1)乙個人發,然後其它所有人都接收,這就是廣播;
2)廣播只能在區域網內部有效,廣播資料是無法越過路由器的,也就是說路由器就是廣播資料的邊界。
3)實現方法:ip位址寫成廣播位址;例如:192.168.1.255。
(4)組播
1)廣播是給其他所有計算機廣播資料,而組播只對其它所有計算機中的某部分計算機廣播資料。
二、i/o多路轉接(復用)模型
1、為什麼需要i/o多路復用模型?
(1)併發伺服器模型的缺點?
1)多程序實現優點:程式設計相對簡單,不用考慮執行緒間的資料同步等、伺服器健壯;缺點:資源消耗大。啟動乙個程序消耗相對比啟動乙個執行緒要消耗大很多,同時在處理很多的連線時候需要啟動很多的程序多去處理,這時候對系統來說壓力就會比較大。另外系統的程序數限制也需要考慮。
2)多執行緒實現優點:相對多程序方式,會節約一些資源,會更加高效一些。缺點:相對多程序方式,增加了程式設計的複雜度,因為需要考慮資料同步和鎖保護。另外乙個程序中不能啟動太多的執行緒。在linux系統下執行緒在系統內部其實就是程序,執行緒排程按照程序排程的方式去執行的。
3)傳統的多程序和多執行緒的伺服器無法滿足大併發操作
a、程序和執行緒數受限
ulimit -u檢視系統最多支援的程序數
ulimit -s檢視棧的大小,算出最大執行緒的個數
改進方法:修改程序個數,系統硬體資源必須匹配;執行緒池解決多執行緒個數受限問題(執行緒池的缺陷)
b、tcp伺服器程序同時開啟檔案數的限制
檢視程序中最大開啟檔案個數:ulimit
修改方法:
第一步,修改/etc/security/limits.conf檔案,在檔案中新增如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪個使用者的開啟檔案數限制,soft或hard指定要修改軟限制還是硬限制;10240則指定了想要修改的新的限制值,即最大開啟檔案數(請注意軟限制值要小於或等於硬限制)。修改完後儲存檔案。
4)當10000個客戶端連線,只有10個客戶端在做資料通訊,此時伺服器的效能?
(2)i/o多路復用的工作原理
2、select
(1)select函式
(2)檔案集合操作
(3)select優缺點
優點:幾乎在所有的平台上支援,跨平台支援性好
缺點:陣列管理檔案描述符,個數受限;由於是採用輪詢方式全盤掃瞄,會隨著檔案描述符fd數量增多而效能下降。
3、poll
基本原理與select一致,也是輪詢+遍歷;唯一的區別就是poll沒有最大檔案描述符限制(使用鍊錶的方式儲存fd)
4、epoll
(1)使用步驟
1)int epoll_creae(int size);
2)int epoll_ctl(int epfd, int op, int fd, struct epoll_event event);
3)int epoll_wait(int epfd,struct epoll_event events, int maxevents, int timeout);
(2)epoll優點
1)select內部使用陣列實現,poll是鍊錶。他們需要做核心區到使用者區的轉換,還需要做資料拷貝,因此效率低。
2)epoll不需要做核心區到使用者區的轉換,因為資料存在共享記憶體中。epoll維護的樹在共享記憶體中,核心區和使用者區去操作共享記憶體,因此不需要區域轉換,也不需要拷貝操作。
5、封裝的庫
libevent
嵌入式課堂筆記
一 資料型別 1 strlen 測量乙個字串有多少字元 不統計 0 printf strlen str d n strlen src 2 整數原碼 補碼 負數補碼 原碼取反 1 3 bit 位元組 8bit 半字 2個位元組 16bit 字 4個位元組 32bit 4 sizeof num 測量乙個...
嵌入式課堂筆記3
學習筆記3 嵌入式linux開發工具 vim gcc gdb make gcc編譯器 學會製作動態庫和靜態庫及使用與區別 gdb偵錯程式 設定斷點 單步執行 除錯記憶體錯誤 make工程管理器 編寫makefile檔案 linux文字編輯器 vim 功能最強大的文字編輯器 拜託滑鼠 vi vim i...
嵌入式第十次課堂筆記
1 區域網 udp傳輸資料的最長長度 1518 18 20 8 1472bit 2 廣域網 用udp協議傳送時,用sendto函式最大能傳送資料的長度為 65535 ip頭 20 udp頭 8 65507位元組。用sendto函式傳送資料時,如果傳送資料長度大於該值,則函式會返回錯誤 3 協議特點 ...