首页 > 其他分享 >netty建立数万客户端连接,并主动发消息

netty建立数万客户端连接,并主动发消息

时间:2024-05-27 22:22:09浏览次数:14  
标签:netty int public channels new 发消息 channel 客户端

@Slf4j
public class NettyClientTest
{
    public static void main(String[] args) throws Exception
    {
        EventLoopGroup workerEventLoopGroup = new NioEventLoopGroup();
        try {
            Bootstrap bootstrap = new Bootstrap();
            bootstrap.group(workerEventLoopGroup)
                    .option(ChannelOption.SO_REUSEADDR, true)
                    .channel(NioSocketChannel.class)
                    .handler(new MyClientChannelInitializer());

            List<Channel> channels = new ArrayList<>();
            for( int i=0; i<60000; i++ ){    // 这里建立60000个连接,实验时建立了两万多个连接就报错了
                log.info("count: {}", i);
                channels.add(bootstrap.connect("localhost", 8080).sync().channel());
            }

            schedule(channels);

            for( Channel channel : channels ){
                channel.closeFuture().sync();
            }
        } finally {
            // 6. 关闭工作线程组
            workerEventLoopGroup.shutdownGracefully();
        }
    }

    private static void schedule(List<Channel> channels){
        // 启动一个线程来不断让客户发消息给服务端
        new Thread(new MyScheduleRunnable(channels)).start();
    }

    private static class MyScheduleRunnable implements Runnable {

        private List<Channel> channels;
        private Random random = new Random();

        public MyScheduleRunnable(List<Channel> channels)
        {
            this.channels = channels;
        }

        @Override
        public void run() {
            int seq = 0;
            while(true){
                try {
                    Thread.sleep(1000L);

                    int index = random.nextInt(channels.size());
                    Channel channel = channels.get(index);
                    // 调用channel.pipeline的方法写数据出去,channel是线程安全的
                    channel.pipeline().writeAndFlush(""+(seq++));    

                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

标签:netty,int,public,channels,new,发消息,channel,客户端
From: https://www.cnblogs.com/chenhz2284/p/18216697

相关文章

  • 客户端身份验证
    当客户端应用程序连接到数据库服务器时,它会指定要以哪个PostgreSQL数据库用户名进行连接,这与以特定用户身份登录Unix计算机的方式非常相似。在SQL环境中,活动数据库用户名决定了对数据库对象的访问权限身份验证是数据库服务器建立客户端身份的过程,并通过扩展确定客户端应用程......
  • ftplib库-制作简易ftp客户端
    #获取上一次的参数try:withopen("./FtpGUI-Python-Configure.cache","r",encoding="utf-8")asf:cfglist=f.read().split("\n")except:cfglist=["","","",""]importtk......
  • 一个免费、时尚、强大的 Windows GitHub 客户端
    前言今天大姚给大家分享一个.NET开源(MITLicense)、免费、时尚、功能强大的WindowsGitHub客户端:FluentHub。工具功能多任务标签页。上下文菜单扩展。对问题和PR进行评论。用户/组织/代码库页面。代码库页面的列/树布局。编辑用户固定的代码库。编辑用户个人资料信息。......
  • 深入netty04-eventloop实现原理和最佳实践
    Reactor线程模型Reactor线程模型在网络框架设计中扮演着关键的角色。该模型通过事件分发器将读写事件分发给对应的事件处理者,以提高系统的吞吐量、可扩展性和安全性。常见的Reactor线程模型包括单线程模型、多线程模型和主从多线程模型。单线程模型:在单线程模型中,所有I......
  • 一文读懂Apollo客户端配置加载流程
    SpringBoot集成Apollo源码分析本文基于apollo-client2.1.0版本源码进行分析Apollo是携程开源的配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。Apollo支持4个维度管理Key-Value格式的配置:appl......
  • 【图解IO与Netty系列】IO多路复用
    IO多路复用为什么要使用IO多路复用Linux的IO多路复用接口selectpollepoll为什么要使用IO多路复用我们常用的IO模型是BIO,我们Java里的IO流大多数都是BIO,也就是同步阻塞式IO,这种IO操作的好处是简单方便,但是缺点也很明显——性能不高。阻塞式IO的特点就是在数据未就绪......
  • Netty_Redis_Zookeeper高并发实战-读书笔记
    转载自:https://www.cnblogs.com/leihongzhi/p/17381156.html 第1章    高并发时代的必备技能1.nettyNetty是JBOSS提供的一个Java开源框架,基于NIO的客户端/服务器编程框架,能够快速开发高并发、高可用、高可靠的网络服务器程序,也能开发高可用、高可靠的客户端程序。NIO是......
  • 面试题剖析:Netty编解码如何解决拆包沾包问题?
    今天我们要聊的主题是Netty的编解码机制,特别是如何解决TCP的拆包和沾包问题。如果你曾在处理网络数据传输时遇到数据包混乱的情况,那么你已经体验过拆包和沾包的“乐趣”了。别担心,Netty提供了一系列强大的解码器,帮助我们轻松应对这些问题。本文将详细介绍这些解码器的工作原......
  • 【达梦系列】IFUN_DATETIME_MODE 导致【无效的客户端版本】
    问题描述在项目开发时,应用程序连接达梦数据库报错:无效的客户端版本。这个问题在没有调整达梦数据参数之前是正常的,调整之后就不对了,但是又不清楚到底是哪个参数的问题。因为调整达梦参数时,用了一个达梦的参数调优脚本(之前能在官网找到,现在找不到了)解决思路根据这个报错,感......
  • DotNetty ByteBuffer
    DotNetty是一个高性能的.NET网络通信框架,基于Netty,支持TCP、UDP、HTTP、WebSocket等协议。适用于高并发、低延迟场景,如实时通信、游戏服务器、IoT应用及大型分布式系统,通过异步I/O、零拷贝等技术提升性能,具备易用性、可扩展性。架构上,围绕Channel、EventLoop、ChannelPipel......