当前位置: 首页 > news >正文

深圳php网站建设自己 做 网站

深圳php网站建设,自己 做 网站,音频网站开发,百度app下载安装Netty Netty初体验基础概念Reactor模型传统的阻塞IO模型基础Reactor模型多线程Reactor模型 为什么要使用Netty#xff1f; #xff08;NIO的框架#xff0c;用于解决高并发出现的问题#xff09; *BIO:同步且阻塞的IO NIO:同步且非阻塞的IO#xff08;不是说线程#x… Netty Netty初体验基础概念Reactor模型传统的阻塞IO模型基础Reactor模型多线程Reactor模型 为什么要使用Netty NIO的框架用于解决高并发出现的问题 *BIO:同步且阻塞的IO NIO:同步且非阻塞的IO不是说线程 AIO:异步且非阻塞的IO 还没有实现业务光写整个流程就非常繁琐。NIO除了实现起来复杂之外还存在一些需要解决的棘手问题比如客户端断线重连如何实现心跳处理(客户端在一定的时间内不断的向服务器发送信息告诉服务器还在)、半包读写处理等等一些列问题此时需要有这么一个框架用于解决和优化NIO存在的问题它就是Netty。 目的客户端越来越多随着客户端的增多代码的复杂程度就变高netty帮我们降低了编写nio的代码复杂程度* Netty初体验 第一步引入依赖 dependenciesdependencygroupIdio.netty/groupIdartifactIdnetty-all/artifactIdversion4.1.35.Final/version/dependency /dependencies服务器端 public class NettyServer {public static void main(String[] args) throws Exception {//创建只处理连接请求的线程组EventLoopGroup bossGroup new NioEventLoopGroup(10);//创建只处理客户端读写业务的线程组EventLoopGroup workGroup new NioEventLoopGroup(10);//创建服务端启动对象ServerBootstrap bootstrap new ServerBootstrap();//配置参数bootstrap.group(bossGroup,workGroup)//使用NioServerSocketChannel作为服务器的通道实现.channel(NioServerSocketChannel.class)//配置用于存放因没有空闲线程导致连接请求被暂存放到队列中的队列长度.option(ChannelOption.SO_BACKLOG,1024)//创建通道初始化的对象并配置该对象,向该对象中添加处理器来实现具体的业务.childHandler(new ChannelInitializerSocketChannel() {//初始化通道Overrideprotected void initChannel(SocketChannel ch) throws Exception {//添加处理器,处理器里面是真正处理业务的ch.pipeline().addLast(new NettyServerHandler());}});//配置groupSystem.out.println(Netty服务器启动了);//同步阻塞地启动服务器ChannelFuture channelFuture bootstrap.bind(9090).sync();//只要服务没关闭该方法会一直阻塞channelFuture.channel().closeFuture().sync();System.out.println(a);bossGroup.shutdownGracefully();workGroup.shutdownGracefully();} }public class NettyServerHandler extends ChannelInboundHandlerAdapter {//当有客户端发送数据来的时候该方法就会被调用Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf (ByteBuf) msg;System.out.println(客户端发送的数据:buf.toString(StandardCharsets.UTF_8));}//读完数据之后调用的方法:发送数据给客户端Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {//创建携带的ByteBuf对象ByteBuf buf Unpooled.copiedBuffer(hello client.getBytes(StandardCharsets.UTF_8));ctx.writeAndFlush(buf);}//异常捕获Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {System.out.println(cause.getMessage());ctx.close();} }客户端 public class NettyClient {public static void main(String[] args) throws Exception {//创建一个线程组用于事件循环EventLoopGroup eventLoopGroup new NioEventLoopGroup();//创建客户端启动对象Bootstrap bootstrap new Bootstrap();//设置相关参数bootstrap.group(eventLoopGroup)//使用NioSocketChannel作为客户端的通道实现.channel(NioSocketChannel.class)//创建通道初始化对象并设置handler业务处理器.handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel ch) throws Exception {//添加处理器处理器里面是实现具体业务的ch.pipeline().addLast(new NettyClientHandler());}});System.out.println(Netty客户端启动了);//告知客户端的服务器的地址并启动客户端ChannelFuture channelFuture bootstrap.connect(127.0.0.1,9090).sync();channelFuture.channel().closeFuture().sync();//阻塞等待完成操作后关闭通道eventLoopGroup.shutdownGracefully();} }public class NettyClientHandler extends ChannelInboundHandlerAdapter {//当客户端完成连接服务器后调用该方法Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {ByteBuf buf Unpooled.copiedBuffer(hello server.getBytes(StandardCharsets.UTF_8));ctx.writeAndFlush(buf);}//当通道有读事件发生时调用的方法读取服务器返回的数据Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf (ByteBuf) msg;System.out.println(来自服务器ctx.channel().remoteAddress()的消息buf.toString(StandardCharsets.UTF_8));} }基础概念 NIO中实现多路复用的核心类是Selector当多路复用器Selector调用select方法时将会查找发生事件的 channel问题是该如何在多个注册到selector上的channel中找到哪些channel发生了事件此时NIO不同的版本有不同的做法。 epoll函数 poll函数 select函数 Reactor模型 不同的线程决定了程序的性能多线程是为了充分利用CPU 传统的阻塞IO模型 客户端连接服务端之后会等客户端输入完之后最后响应给客户端才能紧接着为其它的客户端执行任务因为等待会耗费大量时间所以并没有把CPU用到极致 基础Reactor模型 可以执行完连接之后让别的客户端来拿来处理自己的任务各个操作之间是独立的充分利用服务端之间的性能可能是连接的也可以是读的也可以是写的 多线程Reactor模型
http://www.hkea.cn/news/14266412/

相关文章:

  • 动易网站迁移制作天下网站
  • 制作公司网站的步骤赶集网网站建设ppt模板
  • 电商推广绩效站内优化
  • 网站 被黑重庆商家网站
  • 网站建设介绍专门做自助游的网站
  • 做网站可以设账户吗网站模板超市
  • 响应式网站模板 食品工业设计产品设计公司排名
  • 做直播网站软件有哪些叶县网站建设
  • 布吉网站建设哪家公司便宜点网站后期的维护
  • 平顶山做网站哪家好百度云登陆首页
  • 云主机怎样做网站株洲做网站那家好
  • 谢馥春网站建设的优势海曙网站制作
  • 推广普通话顺口溜网站seo优化技术入门
  • 做网站通常用的软件有什么做木工的网站
  • 加强本单位政务网站建设关于新农村网络建设网站
  • 屏蔽阿里云网站wordpress数据库设计
  • 重庆渝云建设有限公司官方网站建设部考试中心网站
  • 计算机毕业设计作品网站做杂志的网站有哪些内容
  • 网站服务器不稳定怎么打开网页企业网站常见问题
  • 外贸网站推广技巧网站规划和建设的基本要求
  • 地产网站建设wordpress 网站加密
  • 福建省建设厅网站官网《建设监理》网站
  • 成都网站建设公司优势seo优化排名易下拉试验
  • 电商购物网站网站的动效怎么做的
  • 佛山牛豹云网站开发app开发公司大连有几家
  • 网站建设与管理就业方向wordpress 如何添加模板文件
  • 国际网站怎么进湖北网站建设找哪家
  • 贵阳网站制作服务商成都旅游季节最佳时间是几月份
  • 营销型企业网站的建设方案老闵行发展
  • 网站中的搜索功能怎么做静态网页生成器