Transport Configuration (Transport 的 配置)
我們先從一個簡單的創建開始:
-
final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder . newInstance ();
-
final TCPNIOTransport transport = builder . build ();
這樣就創建了一個Transport,如果我們想建立服務端,接下來就是綁定端口和開啟服務:
-
final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder . newInstance ();
-
final TCPNIOTransport transport = builder . build ();
-
try {
-
// Bind server socket and start transport
-
transport . bind ( 12345 );
-
transport . start ();
-
-
System . out . println ( "Press <enter> to exit..." );
-
System . in . read ();
-
} catch ( Exception e ){
-
e . printStackTrace ();
-
}
Systen.in.read()的作用還是不讓Main線程結束,因為transport創建的Selector線程或者Worker都是虛擬線程(虛擬線程什么特點網上有資料)。
按如上所述就開啟了端口為12345的一個服務端了。
?
如果我們需要創建客戶端,那么可以通過transport建立到某個地址+端口的連接:
-
final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder . newInstance ();
-
final TCPNIOTransport transport = builder . build ();
-
Future < Connection > fc = transport . connect ( "127.0.0.1" , 12345 );
-
Connection conn = fc . get ();
-
conn . write ( message );
其中message的格式根據自定義的Filter而變化,如果是底層的,message就是一個Buffer。
接下來還是主要看下我常用的配置:
IOStrategy |
這個之前有講解基本有如下幾個:
|
memoryManager | 這個就是內存管理器:有Heap和ByteBuffer兩種。 |
processor |
這個一般設置FilterChain,我們可以在FilterChain里面添加自己的濾鏡,用于處理消息
|
readBufferSize | 讀數據流的分配內存大小 |
writeBuffersSize |
寫數據流的內存分配大小,一般可以根據工程而配置。
? |
Thread Pool Configuration
好了,基本使用已經學會,那么我們看看幾個參數的作用:
-
final TCPNIOTransportBuilder builder = TCPNIOTransportBuilder . newInstance ();
-
final ThreadPoolConfig config = builder . getWorkerThreadPoolConfig ();
-
config . setCorePoolSize ( 5 ). setMaxPoolSize ( 5 ). setQueueLimit (- 1 );
-
final TCPNIOTransport transport = builder . build ();
queue | 任務隊列 |
queueLimit | 隊列最大容納的數量 |
threadFactory | 線程工廠,用于創建Worker線程或其他線程。。。 |
poolName | 線程池的名稱 |
priority | The priority to be assigned to each thread. This will override any priority assigned by the specified ThreadFactory. |
corePoolSize | 初始線程數 |
maxPoolSize | 最大線程數,-1表示無限大 |
keepAliveTime | The maximum time a thread may stay idle and wait for a new task to execute before it will be released. Custom time units can be used. |
transactionTimeout | The maximum time a thread may be allowed to run a single task before interrupt signal will be sent. Custom time units can be used. |
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
