<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          詳解NIO如何實現(xiàn)群聊?

          共 874字,需瀏覽 2分鐘

           ·

          2021-04-14 11:42

          1. 實現(xiàn)步驟

          構(gòu)建Selector以及服務(wù)端監(jiān)聽

          通道啟動監(jiān)聽并處理建立連接請求

          處理讀數(shù)據(jù)群發(fā)數(shù)據(jù)

          實現(xiàn)客戶端測試

          2. 服務(wù)端實現(xiàn)

          2.0 服務(wù)端完整代碼

          服務(wù)端的主要功能如下 :

          1. 開放監(jiān)聽端口,方法ChatServer構(gòu)造方法

          2. 處理鏈接請求,方法listener實現(xiàn)連接的建立

          3. 讀取消息內(nèi)容,方法readData

          4. 轉(zhuǎn)發(fā)消息給當(dāng)前所有在線的人,方法sendData2All





          2.1 構(gòu)建Selector以及服務(wù)端監(jiān)聽通道

          當(dāng)ChatServer對象被創(chuàng)建時具體實現(xiàn)步驟如下:

          1. 創(chuàng)建serverSocketChannel對象

          2. 設(shè)置處理模式為非阻塞模式

          3. 綁定監(jiān)聽端口

          4. 將channel注冊到selector中


          2.2 實現(xiàn)監(jiān)聽并處理建立連接請求

          連接請求處理實現(xiàn)步驟:

          1. 獲得所有有事件的key, 通過key就可以拿到用戶的SocketChannel

          2. 循環(huán)遍歷每一個key,判斷當(dāng)前是讀事件,還是建立連接事件

          3. 如果是建立連接事件則直接將該通道注冊到selector中

          4. 如果是讀數(shù)據(jù)事件就交給具體的讀數(shù)據(jù)方法處理數(shù)據(jù)


          2.3 處理讀數(shù)據(jù)

          數(shù)據(jù)處理的具體實現(xiàn)步驟 :

          1. 通過key獲取和用戶連接的通道(相當(dāng)于輸入流)

          2. 獲取通道的數(shù)據(jù)并打印

          3. 將數(shù)據(jù)轉(zhuǎn)發(fā)給其他在線用戶


          2.4 群發(fā)數(shù)據(jù)實現(xiàn)

          數(shù)據(jù)群發(fā)實現(xiàn)步驟:

          1. 當(dāng)前在線用戶實際上就是selector中所有注冊的key,也就是在線的用戶

          2. 通過key拿到和用戶的鏈接講消息轉(zhuǎn)發(fā)出去


          2.5 啟動服務(wù)端


          3. 客戶端實現(xiàn)

          客戶端實現(xiàn) :

          1. 首先創(chuàng)建SocketChannel對象并鏈接到具體的服務(wù)器

          2. 將通道注冊到selector中

          3. 開啟一個新的線程監(jiān)聽selector中所有key的事件

          4. 在主線程中循環(huán)阻塞獲取用戶的輸入


          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本一区二区视频在线观看 | 欧美色电影网 | 欧性猛交ⅩXXX乱大交 | 99热在线精品播放 | 青青久操视频 |