從零開始學netty——開啓客戶端

從零開始學netty——第一個netty程序
從零開始學netty——認識decoder數組

經過上面兩篇文章,你們基本瞭解了一個netty的樣子,爲了專一介紹,特地省去了客戶端的編寫,使用telnet來當作客戶端,而且傳輸的都是文字信息。文字信息侷限比較大,因此開始瞭解客戶端的編寫。服務器

初見客戶端

public void bind(String ip, int port) {
		EventLoopGroup worker = new NioEventLoopGroup();
		try {
			Bootstrap b = new Bootstrap();
			b.group(worker).channel(NioSocketChannel.class).handler(new ChannelInitializer<Channel>() {

				@Override
				protected void initChannel(Channel ch) throws Exception {
					ch.pipeline().addLast(new StringEncoder());
				}
			});
			ChannelFuture connect = b.connect(ip, port);
			connect.sync();
			connect.channel().writeAndFlush("hello");
			connect.channel().close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			worker.shutdownGracefully();
		}

	}

上面的代碼就是客戶端代碼,乍一看還都挺熟悉的,和服務端的代碼很類似。這裏用到了StringEncoder,若是看了上篇的decoder,就很容易猜到了此次的encoder,decoder是在處理byte數組到對象的過程,encoder就是處理對象到byte數組的過程。StringEncoder也是netty提供好的類,專門用來處理字符串。框架

connect.sync();

上面的這個代碼須要注意,connect也是一個異步的操做,下面想發消息,起碼也得等到鏈接建立成功的,不少例子通常不寫這句話,是由於他的邏輯,已經能知足connect成功了,通常邏輯仍是要保證前後的。異步

客戶端和服務器端的差別

框架使用代碼自己沒有什麼能夠講的,咱們就作一個對比,方便代碼的記憶。ide

相同點

  1. 都是EventLoopGroup和NioEventLoopGroup。
  2. 都有group,channel,ChannelInitializer方法

不一樣點

- 客戶端 服務器端
EventLoopGroup個數 1 2
工廠類 NioSocketChannel NioServerSocketChannel
啓動類 Bootstrap ServerBootstrap
綁定方法 connect bind

記憶方法

畢竟是框架代碼,經常使用的話,必須是能夠直接寫出來的,而不是複製粘貼。 個人方法是隻去記憶服務端代碼,你只要能寫出來,那麼客戶端根據不一樣點編寫。明顯你們發現,啓動類和工廠類的區別就是有server和沒有server的區別。並且客戶端確定是要作connect操做的,服務器端確定是要作bind操做的。加上這樣的常識。基本能夠很快就寫出一個客戶端代碼。oop

相關文章
相關標籤/搜索