netty 4.0.27 获得复用的channel

  EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group);
            b.channel(NioSocketChannel.class);
            b.remoteAddress(new InetSocketAddress(host, port));
            b.handler(new ChannelInitializer<SocketChannel>() {

                public void initChannel(SocketChannel ch) throws Exception {
                	ch.pipeline().addLast(new StringDecoder());
                	//ch.pipeline().addLast(new StringEncoder());
                    ch.pipeline().addLast(new EchoClientHandler());
                }
            });
            b.option(ChannelOption.SO_KEEPALIVE, true);
            b.option(ChannelOption.TCP_NODELAY, true);
            ChannelFuture f = b.connect().sync();
            channel=f.channel();
            f.addListener(new ChannelFutureListener() {

                public void operationComplete(ChannelFuture future) throws Exception {
                    if(future.isSuccess()){
                        System.out.println("client connected");
                    }else{
                        System.out.println("server attemp failed");
                        future.cause().printStackTrace();
                    }
                }
            });

           // f.channel().closeFuture().sync();
        } finally {
            //group.shutdownGracefully().sync();
        }

其中注释那两段一定不能调用,只有在彻底不用channel的时候调用。

利用得到的channel发送数据:

for(int k=0;k<100000;k++){
	    	ChannelFuture cfu=c.channel.writeAndFlush(Unpooled.copiedBuffer("Netty rocks!"+k, CharsetUtil.UTF_8));
	    	if(cfu!=null){
	    		cfu.sync();
	    	}
    	}

最后三行是很重要的,因为channel 写进通道以后sync 才会将其发送出去。

先写这么多吧。

时间: 2024-10-12 06:38:59

netty 4.0.27 获得复用的channel的相关文章

centos6.6 apache-tomcat-8.0.27安装jenkins

环境: [[email protected] ~]$ uname -r 2.6.32-504.el6.x86_64 [[email protected] ~]$ cat /etc/redhat-release CentOS release 6.6 (Final) IP:10.24.24.17 软件版本: apache-tomcat-8.0.27.tar.gz jdk-8u60-linux-x64.tar.gz ===========================================

【转】Netty那点事(三)Channel中的Pipeline

[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch3-pipeline.md Channel是理解和使用Netty的核心.Channel的涉及内容较多,这里我使用由浅入深的介绍方法.在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制.为了避免枯燥,借用一下<盗梦空间>的“梦境”概念,希望大家喜欢. 一层梦境:Channel实现概览 在Netty里,Channel是通讯的载体,而Chann

Netty 4.0 源码分析(四):ByteBuf

Netty是基于流的消息传递机制.Netty框架中,所有消息的传输都依赖于ByteBuf接口,ByteBuf是Netty NIO框架中的缓冲区.ByteBuf接口可以理解为一般的Byte数组,不过Netty对Byte进行了封装,增加了一些实用的方法. ChannelBuf接口 package io.netty.buffer;public interface ChannelBuf {    ChannelBufType type();    boolean isPooled();} ByteBuf

Netty 5.0

主题结构 Channel(I) - AbstractChannel- AbstractNioChannel- AbstractNioByteChannel - NioSocketChannel 1. 内部有一个 DefaultChannelPipeline, 定义的 connect, read, write等方法实际是调用pipeline的方法 private final DefaultChannelPipeline pipeline; 2. 内部有 远端地址和本地地址 3. 内部有 一个uns

netty 4.0 Object 传输

1对于服务端, private void bindPort(int port){ EventLoopGroup workGroup = new NioEventLoopGroup(); EventLoopGroup bossGroup = new NioEventLoopGroup(); try{ ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workGroup); b.channel(NioServerSocketC

5. 彤哥说netty系列之Java NIO核心组件之Channel

你好,我是彤哥,本篇是netty系列的第五篇. 简介 上一章我们一起学习了如何使用Java原生NIO实现群聊系统,这章我们一起来看看Java NIO的核心组件之一--Channel. 思维转变 首先,我想说的最重要的一个点是,学习NIO思维一定要从BIO那种一个连接一个线程的模式转变成多个连接(Channel)共用一个线程来处理的这种思维. 1个Connection = 1个Socket = 1个Channel,这几个概念可以看作是等价的,都表示一个连接,只不过是用在不同的场景中. 如果单从阻塞

[转帖]Netty架构原理,不怕你看不懂!

Netty架构原理,不怕你看不懂! https://mp.weixin.qq.com/s/UIZL78m105btP2HWFmQmlw 原创: 崔皓 51CTO技术栈 2019-12-06 “ 在分布式系统被广泛应用的今天,服务有可能分布在网络中的各个节点中.因此,服务之间的调用对分布式系统来说,就显得尤为重要. 图片来自 Pexels 对于高性能的 RPC 框架,Netty 作为异步通信框架,几乎成为必备品.例如,Dubbo 框架中通信组件,还有 RocketMQ 中生产者和消费者的通信,都使

关于Netty对于Channel超时机制缺陷的一点想法

我们看看ReadTimeoutHandler下面这个初始化方法,在初始化的时候做的一些事情,Netty的2个改进点我认为都在这里可以体现出来(下面红体): private void initialize(ChannelHandlerContext ctx) { // Avoid the case where destroy() is called before scheduling timeouts. // See: https://github.com/netty/netty/issues/1

netty io.netty.channel介绍2

Interface ChannelHandlerContext 上下文对象使得当前channelhandler可以与其所属的channelpipeline以及其他handler进行交互,可以通知所属channelpipeline中的下一个handler,也可动态修改其所属的channelpipeline,具体功能如下: 通知.通过调用channelhandlercontext提供的方法可以调用同一个channelpipeline中的相邻的下一个channelhandler,详情可以参照chann