通过上面两篇文章,大家基本了解了一个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成功了,一般逻辑还是要保证先后的。
客户端和服务器端的差异框架使用代码本身没有什么可以讲的,我们就做一个对比,方便代码的记忆。
相同点- 都是EventLoopGroup和NioEventLoopGroup。
- 都有group,channel,ChannelInitializer方法
- | 客户端 | 服务器端 |
---|---|---|
EventLoopGroup个数 | 1 | 2 |
工厂类 | NioSocketChannel | NioServerSocketChannel |
启动类 | Bootstrap | ServerBootstrap |
绑定方法 | connect | bind |
毕竟是框架代码,常用的话,必须是可以直接写出来的,而不是复制粘贴。 我的方法是只去记忆服务端代码,你只要能写出来,那么客户端根据不同点编写。明显大家发现,启动类和工厂类的区别就是有server和没有server的区别。而且客户端肯定是要做connect操作的,服务器端肯定是要做bind操作的。加上这样的常识。基本可以很快就写出一个客户端代码。
点击查看更多内容
2人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦