NIO客戶端主要建立過程

2022-04-01 20:54:50 字數 1943 閱讀 2239

nio客戶端主要建立過程:

socketchannel clientchannel = socketchannel.open();

步驟二:設定socketchannel為非阻塞模式,同時設定客戶端連線的tcp引數,示例**如下:

clientchannel.configureblocking(false);

socket.setreuseaddress(true);

socket.setreceivebuffersize(buffer_size);

socket.setsendbuffersize(buffer_size);

步驟三:非同步連線服務端,示例**如下:

boolean connected = clientchannel.connect(new inetsocketaddress(ip,port));

步驟四:判斷是否連線成功,如果連線成功,則直接註冊讀狀態為到多路復用器中,如果當前沒有連線成功(非同步連線,返回false,說明客戶端已經傳送sync包,服務端沒有返回ack包,物理鏈路還沒有建立),示例**如下:

if(connected)else

步驟五:向reactor執行緒的多路復用器註冊op_connet狀態位,監聽服務端的tcp ack應答,示例**如下:

clientchannel.register(select, selectionkey.op_connect,iohandler);

步驟六:建立reactor執行緒,建立多路復用器並啟動執行緒,示例**如下:

selector selector = selector.open();

new thread(new reactortask()).start();

int num = selector.select();

set selectedkeys = selector.selectedkeys();

iterator it = selectedkeys.iterator();

while(it.hasnext)

步驟八:接收connect事件進行處理,示例**如下:

if(key.isconnectable())

步驟九:判斷連線成功,如果連線成功,註冊讀事件到多路復用器,示例**如下: 

if(channel.finishconnect())

步驟十:註冊讀事件到多路復用器,示例**如下:

clientchannel.register(selector,selectionkey.op_read,iohandler);

步驟十一:非同步讀客戶端請求訊息到緩衝區,示例**如下: 

int readnumber = channel.read(receivedbuffer);

步驟十二:對bytebuffer進行編譯碼,如果有半包訊息接收緩衝區reset,繼續讀取後續的報文,將解碼成功的訊息封裝成task,投遞到業務執行緒池中,進行業務邏輯編排,示例**如下: 

object message = null;

whiel(buffer.hasremain())

messagelist.add(message);

}if( !bytebuffer.hasremain())else

if(messagelist != null & !messagelist.isempty())

}

步驟十三:將pojo物件encode成bytebuffer,呼叫socketchannel的非同步write介面,將訊息非同步傳送給客戶端。示例**如下: 

socketchannel.write(buffer);

WCF客戶端建立

1 客戶端體系結構 建立客戶端 有2種方法 1 通過生成的 建立 程式 2 通過通道工廠channelfactory物件來建立 程式 2 channelfactory 建構函式 屬性 credentials 憑證 通過工廠建立的通道,返回客戶端與服務端點通訊時使用的憑證 endpoint 返回通道通...

建立WCF客戶端

服務既然已經發布,接下來我們就需要有乙個客戶端來訪問這個服務了。搭建wcf的客戶端,最重要就是要遵循服務端的契約,客戶端通過 proxy 來訪問服務端點,而並不關心服務端的具體實現。要做的就是通過與服務端確認通訊協議,並通過通道 channels 交換資料。在服務端,servicehost會為每個端...

NIO在客戶端併發訪問多個站點

這個demo演示了nio在客戶端併發訪問多個站點的示例 同時訪問了 www.kaola.com,www.jd.com,www.tmall.com,www.suning.com這個四個站點的首頁,通過列印的資訊可以發現總耗時取決於最大suning的耗時。ue may 09 23 41 07 cst 2...