課程
/后端開發(fā)
/Java
/Java Socket應(yīng)用---通信是這樣練成的
Socket通信模型
2014-11-22
源自:Java Socket應(yīng)用---通信是這樣練成的 3-1
正在回答
socket模型:1、阻塞模型???一個單進(jìn)程accept阻塞,接收到客戶端請求后,read消息,處理write返回,然后循環(huán)繼續(xù)accept。???這種模型最最簡單,不實(shí)際,沒什么實(shí)際用途,對于新手教學(xué)還行。2、多進(jìn)程(線程)模型???主進(jìn)程循環(huán)accept阻塞,接收到客戶端請求后,fork子進(jìn)程處理,子進(jìn)程read阻塞,接收客戶端消息并響應(yīng)。???這種模型是我使用到最多的,簡單實(shí)用,但是當(dāng)客戶端請求超多時,fork子進(jìn)程多,系統(tǒng)資源消耗大,效果不理想;當(dāng)然這種與多線程同理。3、進(jìn)程池(線程池)???主進(jìn)程產(chǎn)生固定多的子進(jìn)程,并定時監(jiān)控子進(jìn)程狀態(tài),初始子進(jìn)程都為空閑狀態(tài)。子進(jìn)程在accept到客戶端請求,通知主進(jìn)程我很忙,然后處理請求,請求處理完成后,通知主進(jìn)程我很閑。主進(jìn)程主要監(jiān)控子進(jìn)程是否僵死或退出,維護(hù)進(jìn)程池固定數(shù)量的進(jìn)程來處理消息。???這種模型,可能每個人的實(shí)現(xiàn)方式不一樣,這是我接觸到的。優(yōu)點(diǎn)是:不會產(chǎn)生超多的進(jìn)程(線程)以至于過多消耗資源,在請求數(shù)量不多的情況下,效果還好;缺點(diǎn)是:因為是‘池’都有限制,當(dāng)遠(yuǎn)遠(yuǎn)超過進(jìn)程池限制的進(jìn)程數(shù),效果并不理想。4、連接池???這種實(shí)現(xiàn)方式我第一次聽說,在網(wǎng)上查了好久也沒有頭緒。在我的理解里,socket都是客戶端向服務(wù)端發(fā)請求建立socket連接,因為客戶端不同這種連接怎么重用?請高手指點(diǎn)一二,主要講清原理即可。5、select事件模型???這種實(shí)現(xiàn)方式是主進(jìn)程將socket監(jiān)聽連接和client請求連接一起FD_SET到一個內(nèi)核隊列中,內(nèi)核一直檢查這個隊列的哪個socket描述符有讀或?qū)懟虍惓5捻憫?yīng)則通知用戶進(jìn)程。用戶進(jìn)程檢測到socket監(jiān)聽連接有響應(yīng),則accept與客戶端建立連接,并把新的client請求連接FD_SET到內(nèi)核隊列中;如果檢測到client請求連接有響應(yīng),則fork子進(jìn)程,read客戶端消息,處理并響應(yīng)消息。???這種模型,select會捕獲到你設(shè)置的某個socket描述符有可讀可寫或異常的事件,但是程序員需要自己檢查自己設(shè)置的所有描述符,以確認(rèn)是哪個描述符有事件發(fā)生。優(yōu)點(diǎn):占用資源少,不會消耗太多的cpu;缺點(diǎn)是select的效率和FD_SET到內(nèi)核隊列中的描述符的個數(shù)有關(guān),當(dāng)需要檢測的描述符過多時,就要花費(fèi)過多的時間去檢測所有的描述符是否有時間發(fā)生,而且可以FD_SET的描述符內(nèi)核也有限制,當(dāng)客戶端請求成千上萬時,select便無能為力。6、epoll事件模型???這種模型我剛開始接觸,目前還沒有完全使用或練習(xí)過。但是實(shí)現(xiàn)方式卻是目前最好的一種模型,對設(shè)置監(jiān)測的socket描述符同時設(shè)置回調(diào)函數(shù),當(dāng)內(nèi)核監(jiān)測到socket描述符有事件發(fā)生,則會主動觸發(fā)回調(diào)函數(shù)。???這種模型,優(yōu)點(diǎn):可以接收任意多的連接,高效率,低消耗,穩(wěn)定易使用;缺點(diǎn):因為各系統(tǒng)提供的接口有很大的差異,可移植性差。
舉報
分享的是 Java 中的網(wǎng)絡(luò)編程,使用Socket實(shí)現(xiàn)網(wǎng)絡(luò)聊天通信
2 回答socket tcp通信
1 回答socket可否用于GPRS通信中?
1 回答socket 和 外網(wǎng)通信 的問題
1 回答Socket是屬于5層數(shù)據(jù)模型中的那一層呢?
1 回答如何Socket實(shí)現(xiàn)多個客戶端相互通信(圖文無關(guān))
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2015-12-08
socket模型:
1、阻塞模型
???一個單進(jìn)程accept阻塞,接收到客戶端請求后,read消息,處理write返回,然后循環(huán)繼續(xù)accept。
???這種模型最最簡單,不實(shí)際,沒什么實(shí)際用途,對于新手教學(xué)還行。
2、多進(jìn)程(線程)模型
???主進(jìn)程循環(huán)accept阻塞,接收到客戶端請求后,fork子進(jìn)程處理,子進(jìn)程read阻塞,接收客戶端消息并響應(yīng)。
???這種模型是我使用到最多的,簡單實(shí)用,但是當(dāng)客戶端請求超多時,fork子進(jìn)程多,系統(tǒng)資源消耗大,效果不理想;當(dāng)然這種與多線程同理。
3、進(jìn)程池(線程池)
???主進(jìn)程產(chǎn)生固定多的子進(jìn)程,并定時監(jiān)控子進(jìn)程狀態(tài),初始子進(jìn)程都為空閑狀態(tài)。子進(jìn)程在accept到客戶端請求,通知主進(jìn)程我很忙,然后處理請求,請求處理完成后,通知主進(jìn)程我很閑。主進(jìn)程主要監(jiān)控子進(jìn)程是否僵死或退出,維護(hù)進(jìn)程池固定數(shù)量的進(jìn)程來處理消息。
???這種模型,可能每個人的實(shí)現(xiàn)方式不一樣,這是我接觸到的。優(yōu)點(diǎn)是:不會產(chǎn)生超多的進(jìn)程(線程)以至于過多消耗資源,在請求數(shù)量不多的情況下,效果還好;缺點(diǎn)是:因為是‘池’都有限制,當(dāng)遠(yuǎn)遠(yuǎn)超過進(jìn)程池限制的進(jìn)程數(shù),效果并不理想。
4、連接池
???這種實(shí)現(xiàn)方式我第一次聽說,在網(wǎng)上查了好久也沒有頭緒。在我的理解里,socket都是客戶端向服務(wù)端發(fā)請求建立socket連接,因為客戶端不同這種連接怎么重用?請高手指點(diǎn)一二,主要講清原理即可。
5、select事件模型
???這種實(shí)現(xiàn)方式是主進(jìn)程將socket監(jiān)聽連接和client請求連接一起FD_SET到一個內(nèi)核隊列中,內(nèi)核一直檢查這個隊列的哪個socket描述符有讀或?qū)懟虍惓5捻憫?yīng)則通知用戶進(jìn)程。用戶進(jìn)程檢測到socket監(jiān)聽連接有響應(yīng),則accept與客戶端建立連接,并把新的client請求連接FD_SET到內(nèi)核隊列中;如果檢測到client請求連接有響應(yīng),則fork子進(jìn)程,read客戶端消息,處理并響應(yīng)消息。
???這種模型,select會捕獲到你設(shè)置的某個socket描述符有可讀可寫或異常的事件,但是程序員需要自己檢查自己設(shè)置的所有描述符,以確認(rèn)是哪個描述符有事件發(fā)生。優(yōu)點(diǎn):占用資源少,不會消耗太多的cpu;缺點(diǎn)是select的效率和FD_SET到內(nèi)核隊列中的描述符的個數(shù)有關(guān),當(dāng)需要檢測的描述符過多時,就要花費(fèi)過多的時間去檢測所有的描述符是否有時間發(fā)生,而且可以FD_SET的描述符內(nèi)核也有限制,當(dāng)客戶端請求成千上萬時,select便無能為力。
6、epoll事件模型
???這種模型我剛開始接觸,目前還沒有完全使用或練習(xí)過。但是實(shí)現(xiàn)方式卻是目前最好的一種模型,對設(shè)置監(jiān)測的socket描述符同時設(shè)置回調(diào)函數(shù),當(dāng)內(nèi)核監(jiān)測到socket描述符有事件發(fā)生,則會主動觸發(fā)回調(diào)函數(shù)。
???這種模型,優(yōu)點(diǎn):可以接收任意多的連接,高效率,低消耗,穩(wěn)定易使用;缺點(diǎn):因為各系統(tǒng)提供的接口有很大的差異,可移植性差。