国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

傳統Socket IO與NIO的比較

2019-11-11 07:43:00
字體:
來源:轉載
供稿:網友

傳統Socket IO特點

1、傳統IO有兩個阻塞點,一個是接收客戶端的阻塞點,另外一個是客戶連接后接收消息的阻塞點

2、在單線程下,一個Server只能為一個客戶端服務,其他客戶端想連接服務端必須等待前一個客戶端釋放掉。

3、在多線程下,一個Server可以為多個客戶端服務,每來一個客戶端就給客戶端分配一個線程,這樣消耗的資源太多,類比server是一個餐廳,一個線程就是一個服務員,每來一個客人就安排一個服務員專門為其服務,如果客人多了,成本就高了。

這里寫圖片描述

NIO特點

1、NIO主要有ServerSocketChannel,Selector,SocketChannel,SelectionKey幾個類組成

2、NIO是單線程的

3、只有一個阻塞點

4,、如果拿NIO比作成一個餐廳的話,ServerSocketChannel就相當于整個餐廳,SocketChannel相當于客人,Selector相當于服務員,SelectionKey相當于服務種類(迎接客人,點餐等)

A、餐廳開張時,會先打開大門,這里的大門相當于端口號,serverChannel.configureBlocking(false); //設置為非阻塞,相當于服務員不一定要站在大門口 serverChannel.socket().bind(new InetSocketAddress(port));//大門地址 this.selector = Selector.open();//服務員開始工作B、serverChannel.register(selector, SelectionKey.OP_ACCEPT);//告訴服務員要看著大門的情況,如果有客人來就要上去迎接C、Set<SelectionKey> keys = selector.selectedKeys();迭代服務種類,此時服務員時刻都在監控著大門,一旦大門有客人進來,他就知道D、如果Set里有值了,說明有客人來或者有客人點餐了,先判斷下這個值是客人來了還是點餐了,第一次來的肯定是客人來了E、key.isAcceptable() 表示客人從大門進來了,SocketChannel channel = server.accept(); 獲得了這個客人的信息,channel.register(selector, SelectionKey.OP_READ);表示客人進來了,那就要叫他坐下來,這是服務員就要記住這個客人隨時都要點餐了F、key.isReadable() 表示客戶開始點餐,客人把點餐的信息告訴服務員。

這里寫圖片描述

傳統IO與NIO的主要區別就是NIO不要一直阻塞著,一旦有消息過來會主動告訴服務端,另外一個是NIO一個單線程可以處理N個客戶端。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东海县| 大姚县| 察隅县| 娄烦县| 白城市| 卓资县| 专栏| 黔西县| 固阳县| 岑巩县| 荣成市| 保亭| 盱眙县| 台州市| 仪陇县| 雷山县| 凤冈县| 贞丰县| 顺昌县| 长兴县| 呼和浩特市| 弥渡县| 商都县| 宜都市| 任丘市| 阜城县| 凉山| 论坛| 云霄县| 内乡县| 嵩明县| 波密县| 什邡市| 金溪县| 阜宁县| 乃东县| 壶关县| 大关县| 鄯善县| 增城市| 阿克|