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

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

傳統Socket IO與NIO的比較

2019-11-11 07:47:51
字體:
來源:轉載
供稿:網友

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


上一篇:Thrift框架介紹

下一篇:位運算例題2

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和田市| 富裕县| 双桥区| 台中市| 克东县| 南投市| 南安市| 隆子县| 久治县| 巫山县| 包头市| 宜章县| 崇明县| 玉环县| 阳西县| 柘荣县| 濮阳市| 汤原县| 通化市| 叙永县| 亳州市| 崇信县| 宁河县| 汉川市| 甘谷县| 定兴县| 南靖县| 铜山县| 山阴县| 平潭县| 张家口市| 武冈市| 泾阳县| 台江县| 余庆县| 景德镇市| 西安市| 博罗县| 天水市| 高要市| 乐陵市|