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

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

傳統Socket IO與NIO的比較

2019-11-11 07:04:50
字體:
來源:轉載
供稿:網友

傳統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個客戶端。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东丰县| 丹棱县| 会昌县| 莲花县| 哈巴河县| 将乐县| 内丘县| 紫阳县| 桐庐县| 瓮安县| 清水县| 文山县| 维西| 介休市| 措勤县| 牟定县| 德化县| 方山县| 房产| 衡东县| 嘉定区| 秀山| 清水县| 平山县| 惠来县| 西安市| 高雄市| 丹江口市| 油尖旺区| 应用必备| 丹阳市| 盐边县| 黄龙县| 射洪县| 肥东县| 镇宁| 阿克苏市| 武陟县| 大渡口区| 峨山| 上虞市|