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...