中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java nio socket的問題實例分析

發布時間:2021-12-16 16:48:44 來源:億速云 閱讀:154 作者:iii 欄目:云計算

本篇內容介紹了“java nio socket的問題實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

第一個問題:

java nio的開發過程當中,在我們一個channel對象的時候,第一步就是要把它的阻塞模式配置為非阻塞。ServerSocketChannel.configureBlocking(false);

我們試圖去了解一下這個configureBlocking函數究竟做了些什么事情,

但是最終我們找到了一個native的函數,具體內部干了些什么,貌似不是很容易了解。

那么我們試一下,把它配置為true的話,會發生什么樣的事情。

結果,在register到selector上的時候,直接報錯了。

java.nio.channels.IllegalBlockingModeException

關于這個問題,雖然沒有得到一個確切的答案,不過貌似基本能夠解決我們的一部分疑惑,要使用selector就只能是false。

第二個問題,有一個簡單的java nio的例子,當中我們用到了SelectionKey當中3個值,OP_READ、OP_CONNECT、OP_ACCEPT。但是如果我們看一下java源碼的話,會發現,其實還有一個值,叫做OP_WRITE,這個值究竟是怎么用的,因為在我們之前例子當中,server和client之間的數據交換已經基本完成,在收到read事件之后,通過channel把響應寫回去,貌似沒有OP_WRITE什么事啊!!!

首先我們對OP_READ、OP_CONNECT、OP_ACCEPT這幾個值,重新進行一下解釋,以OP_READ為例,應該解釋為read就緒,換句話說,對方,已經向我寫入數據了,這個時候開始讀了。

那么OP_WRITE就好解釋了,寫就緒,那么寫就緒的條件是什么呢?大體可以有2個條件,自己的寫緩沖區是有空間的,網絡環境是暢通的。

我們試一下,如果我們把一個SocketChannel的OP_WRITE注冊到selector上的話,會發生什么樣的事情。

修改一下之前的代碼,Server端,接收一個客戶端連接之后調用這樣一句

channel.register(this.selector, SelectionKey.OP_WRITE);//原來是OP_READ

這樣的話,因為網絡是暢通的,本地的寫緩沖區也是空間很充裕的,會一直試圖做寫的事情。

綜上所述,在網絡環境很好,以及寫出的任務量不是很大的情況下,可能并不需要OP_WRITE的使用,而在某些高并發的情況下,OP_WRITE可能還是有其實際的用途的。

“java nio socket的問題實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普安县| 平阴县| 抚松县| 南阳市| 安西县| 福海县| 阳新县| 望奎县| 承德市| 名山县| 阿拉善右旗| 松溪县| 阜新| 金湖县| 和平区| 当阳市| 阿克苏市| 兴安盟| 洞头县| 田东县| 高台县| 读书| 庆元县| 吉安县| 临澧县| 贡觉县| 蓬安县| 湖北省| 东海县| 江华| 马龙县| 宣汉县| 滁州市| 金湖县| 普兰县| 当阳市| 民勤县| 连云港市| 广灵县| 乐陵市| 蓝田县|