日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux服務器如何處理非阻塞Socket?

網(wǎng)絡編程中阻塞和非阻塞socket的區(qū)別?

阻塞:一般的I/O操作可以在新建的流中運用.在服務器回應前它等待客戶端發(fā)送一個空白的行.當會話結束時,服務器關閉流和客戶端socket.如果在隊列中沒有請示將會出現(xiàn)什么情況呢?那個方法將會等待一個的到來.這個行為叫阻塞.accept()方法將會阻塞服務器線程直到一個呼叫到來.當5個連接處理完閉之后,服務器退出.任何的在隊列中的呼叫將會被取消.

非阻塞:非阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡調(diào)用時,不管是否執(zhí)行成功,都立即返回。比如調(diào)用recv()函數(shù)讀取網(wǎng)絡緩沖區(qū)中數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調(diào)用上。在實際Windows網(wǎng)絡通信軟件開發(fā)中,異步非阻塞套接字是用的最多的。平常所說的C/S(客戶端/服務器)結構的軟件就是異步非阻塞模式的

為什么我的socket的read方法沒有阻塞,直接?

一、你調(diào)用read的時候,實際上調(diào)用的是socketchannel的read方法,而你設置的阻塞模式是ServerSocketChannel的模式,所以調(diào)用read時依然會采用默認的阻塞方式,如果你希望用非阻塞的方式,只要設置一下socketchannel的阻塞模式就OK了。

二、默認情況下,read的方法是阻塞模式的,所以沒有辦法設置他的超時時間,如果客戶端異常退出,當前的連接將永遠等待下去,如果你修改成非阻塞模式就沒有這個問題了,非阻塞模式你可以判斷read返回值,如果超過N時間返回值一直都是0,就把當前的連接關閉。

三、我并沒有這樣混合用過,還沒遇到過這樣的問題,我猜想有可能是跟關閉的socketchannel、socket等等有關吧,可能關閉socket和關閉channel有些區(qū)別,我也不確定,反正建議你,想要NIO就用NIO,要是想要serversocket和scoket,那就只用這兩個,盡量不要混合使用。希望對你有幫助。

recv是阻塞還是非阻塞的?

socket分為阻塞和非阻塞兩種,可以通過setsockopt,或者更簡單的setblocking, settimeout設置。

阻塞式的socket的recv服從這樣的規(guī)則:當緩沖區(qū)內(nèi)有數(shù)據(jù)時,立即返回所有的數(shù)據(jù);當緩沖區(qū)內(nèi)無數(shù)據(jù)時,阻塞直到緩沖區(qū)中有數(shù)據(jù)。

非阻塞式的socket的recv服從的規(guī)則則是:當緩沖區(qū)內(nèi)有數(shù)據(jù)時,立即返回所有的數(shù)據(jù);當緩沖區(qū)內(nèi)無數(shù)據(jù)時,產(chǎn)生EAGAIN的錯誤并返回(在Python中會拋出一個異常)。

兩種情況都不會返回空字符串,返回空數(shù)據(jù)的結果是對方關閉了連接之后才會出現(xiàn)的。由于TCP的socket是一個流,因此是不存在“讀完了對方發(fā)送來的數(shù)據(jù)”這件事的。

你必須要每次讀到數(shù)據(jù)之后,根據(jù)數(shù)據(jù)本身來判斷當前需要等待的數(shù)據(jù)是否已經(jīng)全部收到,來判斷是否進行下一個recv。

可以看一下hiredis庫的接口設計,hiredis中的Reader有兩個接口,分別是feed和gets,feed每次送入一部分數(shù)據(jù),不需要保證是正確分片的;gets則返回已經(jīng)得到的完整的結果,如果返回False,表示已經(jīng)沒有新的結果?;旧纤械腡CP的socket編程都是遵循這樣的方法:讀入新數(shù)據(jù);判斷有沒有完整的新消息;處理新消息,或者等待更多數(shù)據(jù)。

到此,以上就是小編對于linux 非阻塞io的問題就介紹到這了,希望這3點解答對大家有用。


當前標題:Linux服務器如何處理非阻塞Socket?
網(wǎng)站路徑:http://m.5511xx.com/article/dhpopcg.html