tigase網絡核心SockThread詳解

總述

  • SocketThread類是一個很底層的類,在初始化時調用了Selector.open(clientsSel)。網絡

  • socketReadThread nThread個socket

  • socketWriteThread nThread個spa

  • ResultsListener nThread個線程

  • completionService一個,池化線程nThread個,在sockThread.run裏被submit,ResultsListener裏進行completionService.take().get()取出執行結果。對象

  • forCompletion有序隊列一個,在socketThread.run裏開始add,同一方法當即被從最小依次取出,而後submit給completionService。隊列

  • waiting有序隊列一個,recreateSelector階段存在add,最大來源是addSocketService靜態方法,在 socketThread.run最後階段的addAllWaiting時註冊Channel時把waiting裏的IOService取出作爲附加對象 綁定。事件

重點方法

  • 主方法+兩個有序隊列,一個是等待處理隊列,一個是完成隊列。rem

  • forCompletion完成隊列裏的內容,交由具體的completionService完成後,由ResultListener相關線程處理最終結果。get

  • 主方法:addSocketService。先判斷是等發仍是等收,取模進入對應的處理線程的wait隊列。對應線程會由addAllWaiting觸發網絡綁定,主線程的死循環捕捉事件進行分發給completionService的動做。it

  • addSocketService的IOService,應該是永遠waitingToRead,有時waitingToSend。

  • 主方法:removeSocketService。取消綁定對應的SelectionKey。

SocketIO

  • 對SocketChannel的封裝。

  • 用一個LinkedBlockingQueue來保存要發送的數據dataToSend。

  • 作了真正的流量統計。

ConnectionOpenThread

  • 這個類啓動了accept的端口等待接入。

  • 接入後生成一個IOService,其中保存了socketChannel信息。

  • 傳遞IOService到能夠waiting隊列後,取出其中的socketChannel綁定事件,便可收發。

相關文章
相關標籤/搜索