首页 > 其他分享 >Netty

Netty

时间:2024-08-27 17:26:03浏览次数:10  
标签:Netty group netty port new public channel

Netty创建UCP

客户端:

public class NettyClient {
    public static void main(String[] args) {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
             .channel(NioDatagramChannel.class)
             .handler(new MyChannelInitializer()); // 使用自定义初始化器
            Channel ch = b.bind(7398).sync().channel();
            ch.writeAndFlush(new DatagramPacket(
                Unpooled.copiedBuffer("你好端口7397的bugstack虫洞栈,我是客户端小爱,你在吗!", Charset.forName("GBK")),
                new InetSocketAddress("127.0.0.1", 7397))).sync();
            ch.closeFuture().await();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            group.shutdownGracefully();
        }
    }
}

服务端:

public class NettyServer {
    public static void main(String[] args) throws InterruptedException {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
             .channel(NioDatagramChannel.class)
             .option(ChannelOption.SO_BROADCAST, true) // 允许广播
             .handler(new ChannelInitializer<NioDatagramChannel>() {
                 @Override
                 protected void initChannel(NioDatagramChannel ch) {
                     ChannelPipeline pipeline = ch.pipeline();
                     pipeline.addLast(new MyServerHandler()); // 自定义处理器
                 }
             });
            ChannelFuture f = b.bind(7397).sync();
            System.out.println("itstack-demo-netty udp server start done.");
            f.channel().closeFuture().sync();
        } finally {
            group.shutdownGracefully();
        }
    }
}

Netty创建TCP

服务端:

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class TcpServer {

    private final int port;

    public TcpServer(int port) {
        this.port = port;
    }

    public void run() throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup(); // 接受连接的线程组
        EventLoopGroup workerGroup = new NioEventLoopGroup(); // 处理连接的线程组

        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup)
             .channel(NioServerSocketChannel.class)
             .childHandler(new ChannelInitializer<SocketChannel>() {
                 @Override
                 protected void initChannel(SocketChannel ch) {
                     // 这里添加自定义的ChannelHandler
                 }
             });

            // 绑定端口并启动服务器
            ChannelFuture f = b.bind(port).sync();
            System.out.println("服务器启动在端口: " + port);
            f.channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }

    public static void main(String[] args) {
        new TcpServer(8080).run();
    }
}

客服端:

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;

public class TcpClient {

    private final String host;
    private final int port;

    public TcpClient(String host, int port) {
        this.host = host;
        this.port = port;
    }

    public void run() throws InterruptedException {
        EventLoopGroup group = new NioEventLoopGroup();

        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
             .channel(NioSocketChannel.class)
             .handler(new ChannelInitializer<SocketChannel>() {
                 @Override
                 protected void initChannel(SocketChannel ch) {
                     // 这里添加自定义的ChannelHandler
                 }
             });

            // 连接到服务器
            ChannelFuture f = b.connect(host, port).sync();
            System.out.println("客户端连接到 " + host + ":" + port);
            f.channel().closeFuture().sync();
        } finally {
            group.shutdownGracefully();
        }
    }

    public static void main(String[] args) {
        new TcpClient("127.0.0.1", 8080).run();
    }
}

标签:Netty,group,netty,port,new,public,channel
From: https://www.cnblogs.com/firsthelloworld/p/18383192

相关文章

  • netty实现私信聊天
    websocket的介绍:WebSocket是一种在网络通信中的协议,它是独立于HTTP协议的。该协议基于TCP/IP协议,可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应,并且这种响应是双向的。WebSocket协议端口通常是80,443。WebSocket的出现使得浏览器具备了实时双向通信的能力......
  • Netty 异步任务模型 及 Future-Listener 机制
    https://cloud.tencent.com/developer/article/2246990一、Netty模型二、异步模型三、Future-Listener机制四、Future-Listener机制代码示例 以服务器端为例1.线程池:Netty模型核心就是两个线程池,BossGroup线程池和WorkerGroup线程池;①BossGroup......
  • Netty的常用操作
    EventLoopEventLoop本质上是一个单线程执行器,里面有run方法处理Channel上源源不断的IO事件。EventLoop继承了ScheduledExecutorService中的所有方法。常用方法Future<?>submit(Runnabletask)提交任务ScheduledFuture<?>scheduleWithFixedDelay(Runnablecommand,long......
  • 【Java手写RPC框架系列-1】—— 基础知识准备:RPC+Netty
    代码随想录知识星球介绍https://articles.zsxq.com/id_m76jd72243bi.html基于Netty手写实现RPChttps://www.cnblogs.com/mic112/p/15565795.html项目背景与介绍RPC:远程过程调用协议:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序......
  • Netty框架
    Netty什么是NettyNetty的官网:[https://netty.io/Netty是一个JavaNIO技术的开源异步事件驱动的网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。往通俗了讲,可以将Netty理解为:一个将JavaNIO进行了大量封装,并大大降低JavaNIO使用难度和上手门槛的网络编程框架......
  • 全网最全-Netty从入门到精通
    XiaoYongCai/2024/8/6一:Netty入门1.Netty概述A.Netty的定义Netty是一个提供异步事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。在Java领域,Netty被认为是除了Java原生NIO之外的最佳网络编程框架。B.Netty的核心组件Netty的......
  • 【Java】NIO-从入门到精通-Netty先修课-全网最全-综合案例分析
    XiaoYongCai2024/8/6一:AboutByteBuffer1.ByteBuffer用法在JavaNIO中,Buffer是一个用于存储特定基本类型数据的容器,ByteBuffer是最常用的Buffer类型,用于存储字节序列。以下是ByteBuffer的读写操作分析:A.Buffer的基本属性capacity:缓冲区的容量,即可以存储的最大数......
  • Netty技术全解析:ByteToMessageDecoder类深度解析
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • 面试官:说说Netty的零拷贝技术?
    零拷贝技术概述定义:一种减少数据拷贝和上下文切换的技术,用于提升IO传输性能。原因:传统IO操作需要在用户态和内核态之间多次拷贝数据和切换上下文,这增加了时间成本。用户态与内核态用户态:应用程序运行环境,只能访问受限资源。内核态:操作系统内核运行环境,具有高权限,能直接访......
  • Netty的源码分析和业务场景
    Netty是一个高性能、异步事件驱动的网络应用框架,它基于JavaNIO构建,广泛应用于互联网、大数据、游戏开发、通信行业等多个领域。以下是对Netty的源码分析、业务场景的详细介绍:源码概述Netty的核心组件:Netty的架构设计围绕着事件驱动的核心思想,主要包括Channel、EventLo......