美文网首页
Netty入门

Netty入门

作者: 诺之林 | 来源:发表于2018-06-21 16:06 被阅读35次

本文的示例代码参考NettyBasic

目录

开始

spring init -b 1.5.6.RELEASE -dweb --build gradle NettyBasic
vim src/main/java/com/example/NettyBasic/NettyServer.java
package com.example.NettyBasic;

public class NettyServer {
    public static void start() {
        System.out.println("server start");
    }
}
vim src/main/java/com/example/NettyBasic/DemoApplication.java
package com.example.NettyBasic;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        NettyServer.start();
    }
}
  • 测试
./gradlew bootrun
server start

Netty

vim build.gradle
# 省略了未修改代码
dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('io.netty:netty-all:4.1.25.Final')
}
vim src/main/java/com/example/NettyBasic/NettyServer.java
package com.example.NettyBasic;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class NettyServer {
    public static void start() {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childOption(ChannelOption.SO_KEEPALIVE, true)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline channelPipeline = ch.pipeline();
                            channelPipeline.addLast(new LoggerHandler());
                        }
                    });

            System.out.println("server start");
            ChannelFuture channelFuture = serverBootstrap.bind(10001).sync();
            channelFuture.channel().closeFuture().sync();
            System.out.println("server closed");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}
vim src/main/java/com/example/NettyBasic/LoggerHandler.java
package com.example.NettyBasic;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class LoggerHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        System.out.println("read: " + msg.toString().trim());
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
        System.out.println("read complete");
    }
}
  • 测试
# server
./gradlew bootrun

# client
telnet 127.0.0.1 10001
# server
server start
read: PooledUnsafeDirectByteBuf(ridx: 0, widx: 7, cap: 1024)
read complete
read: PooledUnsafeDirectByteBuf(ridx: 0, widx: 7, cap: 1024)
read complete

# client
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
world

Pipeline

vim src/main/java/com/example/NettyBasic/NettyServer.java
public class NettyServer {
    public static void start() {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childOption(ChannelOption.SO_KEEPALIVE, true)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline channelPipeline = ch.pipeline();
                            channelPipeline.addLast(new StringDecoder());
                            channelPipeline.addLast(new LoggerHandler());
                        }
                    });

            System.out.println("server start");
            ChannelFuture channelFuture = serverBootstrap.bind(10001).sync();
            channelFuture.channel().closeFuture().sync();
            System.out.println("server closed");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}
  • 测试
# server
./gradlew bootrun

# client 1
telnet 127.0.0.1 10001

# client 2
telnet 127.0.0.1 10001
# server
server start
read: hello
read complete
read: world
read complete
read: hello
read complete
read: world
read complete

# client 1
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
world

# client 2
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
world

参考

相关文章

  • netty服务端和客户端

    netty简单入门:netty版本大致版本分为 netty3.x 和 netty4.x、netty5.x n...

  • netty 线程模型(未完成)

    参考 Netty原理架构解析 netty 入门 netty工作原理架构图+ 虽然Netty的线程模型基于主从Rea...

  • Netty 实现简单的通讯

    一、netty入门 一,Netty是什么 1,Netty是由JBOSS提供的一个java开源框架。 2,Netty...

  • Netty入门实践

    Netty基础概念 欢迎访问微信原文:Netty入门实践 Bootstrap 和 ServerBootstrap:...

  • netty通信框架

    Netty入门教程——认识Netty彻底理解Netty,这一篇文章就够了 Netty特点 并发高 传输快 封装好 ...

  • Netty 入门

    title: Netty 入门date: 2021/04/06 09:37 一、Netty 概述 1.1 Nett...

  • Netty高速网络通讯(一)

    1、Netty基础入门 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应...

  • Netty之ByteBuf

    通过Netty之Helloworld一文,我们简单的对Netty进行了入门,本文说一下Netty的数据容器Byte...

  • 1.Netty入门

    Netty入门 1.Netty介绍 (1)百度百科介绍: Netty是由JBOSS提供的一个java开源框架。Ne...

  • 高性能NIO框架Netty-对象传输

    上篇文章高性能NIO框架Netty入门篇我们对Netty做了一个简单的介绍,并且写了一个入门的Demo,客户端往服...

网友评论

      本文标题:Netty入门

      本文链接:https://www.haomeiwen.com/subject/yfiqyftx.html