W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
服務(wù)器的引導(dǎo)共用了客戶端引導(dǎo)的一些邏輯。
下表顯示了 ServerBootstrap 的方法
Table 9.2 Methods of ServerBootstrap‘
名稱(chēng) | 描述 |
---|---|
group | 設(shè)置 EventLoopGroup 用于 ServerBootstrap。這個(gè) EventLoopGroup 提供 ServerChannel 的 I/O 并且接收 Channel |
channel channelFactory | channel() 指定 Channel 的實(shí)現(xiàn)類(lèi)。如果管道沒(méi)有提供一個(gè)默認(rèn)的構(gòu)造函數(shù),你可以提供一個(gè) ChannelFactory。 |
localAddress | 指定 ServerChannel 實(shí)例化的類(lèi)。如果不提供,將由操作系統(tǒng)創(chuàng)建一個(gè)隨機(jī)的?;蛘?您可以使用 bind() 或 connect()指定localAddress |
option | 指定一個(gè) ChannelOption 來(lái)用于新創(chuàng)建的 ServerChannel 的 ChannelConfig 。這些選項(xiàng)將被設(shè)置在管道的 bind() 或 connect(),這取決于誰(shuí)首先被調(diào)用。在此調(diào)用這些方法之后設(shè)置或更改 ChannelOption 是無(wú)效的。所支持 ChannelOption 取決于使用的管道類(lèi)型。請(qǐng)參考9.6節(jié)和 ChannelConfig 的 API 文檔 的 Channel 類(lèi)型使用。 |
childOption | 當(dāng)管道已被接受,指定一個(gè) ChannelOption 應(yīng)用于 Channel 的 ChannelConfig。 |
attr | 指定 ServerChannel 的屬性。這些屬性可以被 管道的 bind() 設(shè)置。當(dāng)調(diào)用 bind() 之后,修改它們不會(huì)生效。 |
childAttr | 應(yīng)用屬性到接收到的管道上。后續(xù)調(diào)用沒(méi)有效果。 |
handler | 設(shè)置添加到 ServerChannel 的 ChannelPipeline 中的 ChannelHandler。 具體詳見(jiàn) childHandler() 描述 |
childHandler | 設(shè)置添加到接收到的 Channel 的 ChannelPipeline 中的 ChannelHandler。handler() 和 childHandler()之間的區(qū)別是前者是接收和處理ServerChannel,同時(shí) childHandler() 添加處理器用于處理和接收 Channel。后者代表一個(gè)套接字綁定到一個(gè)遠(yuǎn)端。 |
clone | 克隆 ServerBootstrap 用于連接到不同的遠(yuǎn)端,通過(guò)設(shè)置相同的原始 ServerBoostrap。 |
bind | 綁定 ServerChannel 并且返回一個(gè) ChannelFuture,用于 通知連接操作完成了(結(jié)果可以是成功或者失?。?/td> |
ServerBootstrap 中的 childHandler(), childAttr() 和 childOption() 是常用的服務(wù)器應(yīng)用的操作。具體來(lái)說(shuō),ServerChannel實(shí)現(xiàn)負(fù)責(zé)創(chuàng)建子 Channel,它代表接受連接。因此 引導(dǎo) ServerChannel 的 ServerBootstrap ,提供這些方法來(lái)簡(jiǎn)化接收的 Channel 對(duì) ChannelConfig 應(yīng)用設(shè)置的任務(wù)。
圖9.3顯示了 ServerChannel 創(chuàng)建 ServerBootstrap 在 bind(),后者管理大量的子 Channel。
Figure 9.3 ServerBootstrap
記住 child* 的方法都是操作在子的 Channel,被 ServerChannel 管理。
清單9.4 ServerBootstrap 時(shí)會(huì)創(chuàng)建一個(gè) NioServerSocketChannel實(shí)例 bind() 。這個(gè) NioServerChannel 負(fù)責(zé)接受新連接和創(chuàng)建NioSocketChannel 實(shí)例。
Listing 9.4 Bootstrapping a server
NioEventLoopGroup group = new NioEventLoopGroup();
ServerBootstrap bootstrap = new ServerBootstrap(); //1
bootstrap.group(group) //2
.channel(NioServerSocketChannel.class) //3
.childHandler(new SimpleChannelInboundHandler<ByteBuf>() { //4
@Override
protected void channelRead0(ChannelHandlerContext ctx,
ByteBuf byteBuf) throws Exception {
System.out.println("Reveived data");
byteBuf.clear();
}
}
);
ChannelFuture future = bootstrap.bind(new InetSocketAddress(8080)); //5
future.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture channelFuture)
throws Exception {
if (channelFuture.isSuccess()) {
System.out.println("Server bound");
} else {
System.err.println("Bound attempt failed");
channelFuture.cause().printStackTrace();
}
}
}
);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: