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

域名注册后能开始建设网站吗wordpress 文章去重

域名注册后能开始建设网站吗,wordpress 文章去重,做投资的网站,广州市做app的公司地址一 简单概念RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样.阻塞IO :当阻塞I/O在调用InputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerSocket.accept()方法时,也…一 简单概念RPC: ( Remote Procedure Call),远程调用过程,是通过网络调用远程计算机的进程中某个方法,从而获取到想要的数据,过程如同调用本地的方法一样.阻塞IO :当阻塞I/O在调用InputStream.read()方法是阻塞的,一直等到数据到来时才返回,同样ServerSocket.accept()方法时,也是阻塞,直到有客户端连接才返回,I/O通信模式如下: 复制代码 图片描述(最多50字) 缺点:当客户端多时,会创建大量的处理线程,并且为每一个线程分配一定的资源;阻塞可能带来频繁切换上下文,这时引入NIONIO : jdk1.4引入的(NEW Input/Output),是基于通过和缓存区的I/O方式,(插入一段题外话,学的多忘得也多,之前有认真研究过NIO,后来用到的时候,忘得一干二净,所以学习一些东西,经常返回看看),NIO是一种非阻塞的IO模型,通过不断轮询IO事件是否就绪,非阻塞是指线程在等待IO的时候,可以做其他的任务,同步的核心是Selector,Selector代替线程本省的轮询IO事件,避免了阻塞同时减少了不必要的线程消耗;非阻塞的核心是通道和缓存区,当IO事件的就绪时,可以将缓存区的数据写入通道 复制代码 图片描述(最多50字) 其工作原理:1 由专门的线程来处理所有的IO事件,并且负责转发2 事件驱动机制:事件到的时候才触发,而不是同步监视3 线程通讯:线程之间通讯通过wait,notify等方式通讯,保证每次上下文切换都是有意义的,减少没必要的线程切换通道 : 是对原I/O包中流的模拟,所有数据必须通过Channel对象,常见的通道FileChannel,SocketChannel,ServerSocketChannel,DatagramChannel(UDP协议向网络连接的两端读写数据) 复制代码 图片描述(最多50字) Buffer缓存区 :实际上是一个容器,一个连续的数组,任何读写的数据都经过Buffer 复制代码 图片描述(最多50字) Netty :是由JBOSS提供的一个java开源框架,是一个高性能,异步事件驱动的NIO框架,基于JAVA NIO提供的API实现,他提供了TCP UDP和文件传输的支持,,所有操作都是异步非阻塞的.通过Futrue-Listener机制,本质就是Reactor模式的现实,Selector作为多路复用器,EventLoop作为转发器,而且,netty对NIO中buffer做优化,大大提高了性能二 Netty 客户端和服务端的Netty中Bootstrap和Channel的生命周期Bootstrap简介Bootstarp:引导程序,将ChannelPipeline,ChannelHandler,EventLoop进行整体关联 复制代码 图片描述(最多50字) Bootstrap具体分为两个实现ServerBootstrap:用于服务端,使用一个ServerChannel接收客户端的连接,并创建对应的子ChannelBootstrap:用于客户端,只需要一个单独的Channel,配置整个Netty程序,串联起各个组件二者的主要区别:1 ServerBootstrap用于Server端,通过调用bind()绑定一个端口监听连接,Bootstrap用于Client端,需要调用connect()方法来连接服务器端,我们也可以调用bind()方法接收返回ChannelFuture中Channel2 客户端的Bootstrap一般用一个EventLoopGroup,而服务器的ServerBootstrap会用两个第一个EventLoopGroup专门负责绑定到端口监听连接事件,而第二个EventLoopGroup专门用来处处理每个接收的连接,这样大大提高了并发量 复制代码 public class Server { public static void main(String[] args) throws Exception { // 1 创建线两个事件循环组 // 一个是用于处理服务器端接收客户端连接的 // 一个是进行网络通信的网络读写的 EventLoopGroup pGroup new NioEventLoopGroup(); EventLoopGroup cGroup new NioEventLoopGroup(); // 2 创建辅助工具类ServerBootstrap用于服务器通道的一系列配置 ServerBootstrap b new ServerBootstrap(); b.group(pGroup, cGroup) // 绑定俩个线程组 .channel(NioServerSocketChannel.class) // 指定NIO的模式.NioServerSocketChannel对应TCP, NioDatagramChannel对应UDP .option(ChannelOption.SO_BACKLOG, 1024) // 设置TCP缓冲区 .option(ChannelOption.SO_SNDBUF, 32 * 1024) // 设置发送缓冲大小 .option(ChannelOption.SO_RCVBUF, 32 * 1024) // 这是接收缓冲大小 .option(ChannelOption.SO_KEEPALIVE, true) // 保持连接 .childHandler(new ChannelInitializer() { Override protected void initChannel(SocketChannel sc) throws Exception { //SocketChannel建立连接后的管道 // 3 在这里配置 通信数据的处理逻辑, 可以addLast多个... sc.pipeline().addLast(new ServerHandler()); } }); // 4 绑定端口, bind返回future(异步), 加上sync阻塞在获取连接处 ChannelFuture cf1 b.bind(8765).sync(); //ChannelFuture cf2 b.bind(8764).sync(); //可以绑定多个端口 // 5 等待关闭, 加上sync阻塞在关闭请求处 cf1.channel().closeFuture().sync(); //cf2.channel().closeFuture().sync(); pGroup.shutdownGracefully(); cGroup.shutdownGracefully(); } } public class ServerHandler extends ChannelHandlerAdapter { Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println(server channel active... ); } Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf (ByteBuf) msg; byte[] req new byte[buf.readableBytes()]; buf.readBytes(req); String body new String(req, utf-8); System.out.println(Server : body ); String response 返回给客户端的响应 body ; ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes())); // future完成后触发监听器, 此处是写完即关闭(短连接). 因此需要关闭连接时, 要通过server端关闭. 直接关闭用方法ctx[.channel()].close() //.addListener(ChannelFutureListener.CLOSE); } Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { System.out.println(读完了); ctx.flush(); } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable t) throws Exception { ctx.close(); } } public class Client { public static void main(String[] args) throws Exception { EventLoopGroup group new NioEventLoopGroup(); Bootstrap b new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) .handler(new ChannelInitializerSocketChannel() {Overrideprotected void initChannel(SocketChannel sc) throws Exception { sc.pipeline().addLast(new ClientHandler());} });ChannelFuture cf1 b.connect(127.0.0.1, 8765).sync(); //ChannelFuture cf2 b.connect(127.0.0.1, 8764).sync(); //可以使用多个端口 //发送消息, Buffer类型. write需要flush才发送, 可用writeFlush代替 cf1.channel().writeAndFlush(Unpooled.copiedBuffer(777.getBytes())); cf1.channel().writeAndFlush(Unpooled.copiedBuffer(666.getBytes())); Thread.sleep(2000); cf1.channel().writeAndFlush(Unpooled.copiedBuffer(888.getBytes())); //cf2.channel().writeAndFlush(Unpooled.copiedBuffer(999.getBytes()));cf1.channel().closeFuture().sync(); //cf2.channel().closeFuture().sync(); group.shutdownGracefully(); 复制代码 } } public class ClientHandler extends ChannelHandlerAdapter{ Override public void channelActive(ChannelHandlerContext ctx) throws Exception { } Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { try { ByteBuf buf (ByteBuf) msg; byte[] req new byte[buf.readableBytes()]; buf.readBytes(req); String body new String(req, utf-8); System.out.println(Client : body ); } finally { // 记得释放xxxHandler里面的方法的msg参数: 写(write)数据, msg引用将被自动释放不用手动处理; 但只读数据时,!必须手动释放引用数 ReferenceCountUtil.release(msg); } } Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); } } 其他组件: Handle: 为了支持各种协议和处理数据的方式,可以是连接,数据接收,异常,数据格式转换等ChannelHandlerChannelInboundHandler :最常用的Handler,作用是处理接收数据的事件,来处理我们的核心业务逻辑。ChannelInitializer :当一个链接建立时我们需要知道怎么来接收或者发送数据当然我们有各种各样的Handler实现来处理它,那么ChannelInitializer便是用来配置这些Handler它会提供一个ChannelPipeline并把Handler加入到ChannelPipeline。ChannelPipeline :一个Netty应用基于ChannelPipeline机制,这种机制依赖EventLoop和EventLoopGroup,这三个都和事件或者事件处理相关EventLoop : 为Channel处理IO操作,一个EventLoop可以为多个Channel服务EventLoopGroup :包含多个EventLoopChannel :代表一个Socket连接Future :在Netty中所有的IO操作都是异步的,,因此我们不知道,过来的请求是否被处理了,所以我们注册一个监听,当操作执行成功或者失败时监听自动触发,所有操作都会返回一个ChannelFutrueChannelFutureNetty 是一个非阻塞的,事件驱动的,网络编程框架,我们通过一张图理解一下,Channel,EventLoop以及EventLoopGroup之间的关系 复制代码 图片描述(最多50字) 解释一下,当一个连接过来,Netty首先会注册一个channel,然后EventLoopGroup会分配一个EventLoop绑定到这个channel,在这个channel的整个生命周期过程中,这个EventLoop一直为他服务,这个玩意就是一个线程 复制代码 图片描述(最多50字) 这下聊一下Netty如何处理数据?前面有讲到,handler数据处理核心,,而ChannelPipeline负责安排Handler的顺序和执行,我们可以这样理解,数据在ChannelPipeline中流动,其中ChannelHandler就是一个个阀门,这些数据都会经过每一个ChannelHandler并且被他处理,其中ChannelHandler的两个子类ChannelOutboundHandler和ChannelInboundHandler,根据不同的流向,选择不同的Handler 复制代码 图片描述(最多50字) 由图可以看出,一个数据流进入ChannelPipeline时,一个一个handler挨着执行,各个handler的数据传递,这需要调用方法中ChannelHandlerContext来操作,而这个ChannelHandlerContext可以用来读写Netty中的数据流三 Netty中的业务处理netty中会有很多Handler.具体哪一种Handler还要看继承是InboundAdapter还是OutboundAdapter,Netty中提供一系列的Adapter来帮助我们简化开发,在ChannelPipeline中的每一个handler都负责把Event传递个洗下一个handler,有这些adapter,这些工作可以自动完成,,我们只需覆盖我们真正实现的部分即可,接下来比较常用的三种ChannelHandlerEncoders和Decodeers我们在网络传输只能传输字节流,在发送数据时,把我们的message转换成bytes这个过程叫Encode(编码),相反,接收数据,需要把byte转换成message,这个过程叫Decode(解码)Domain Logic我们真正关心的如何处理解码以后的数据,我们真正的业务逻辑便是接收处理的数据,Netty提供一个常用的基类就是SimpleChannelInboundHandlerT,其中T就是Handler处理的数据类型,消息到达这个Handler,会自动调用这个Handler中的channelRead0(ChannelHandlerContext,T)方法,T就是传过来的数据对象四 基于netty实现的Rpc的例子这是我的github上项目的位置https://github.com/developerxiaofeng/rpcByNetty项目目录结构如下 复制代码 图片描述(最多50字) 详细的项目细节看类中的注释,很详细哦!!! 复制代码 欢迎工作一到五年的Java工程师朋友们加入Java架构开发 855835163 群内提供免费的Java架构学习资料里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码MyBatisNetty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料合理利用自己每一分每一秒的时间来学习提升自己不要再用没有时间“来掩饰自己思想上的懒惰趁年轻使劲拼给未来的自己一个交代
http://wiki.neutronadmin.com/news/232659/

相关文章:

  • 汽车行业网站建设比较哈尔滨网页制作最新招聘信息
  • 网站建设与维护的国家定价标准wordpress网盘
  • 和京东一样的网站如何自己建立一个网站
  • 诚信的小程序开发兼职网站浪起网站建设
  • 网站建设与制作视频教学wordpress用什么数据库连接
  • 网络销售网站外包美食 wordpress
  • 镇江网站优化公司510企业网站系统源码
  • 读图机 东莞网站建设教人做策划的网站
  • 公司网站建设的相关建议古塔网站建设
  • 网站专题制作关闭wordpress更新提示
  • 乐陵人力资源网站网站建设怎么收费
  • 上海做外贸网站建设php移动网站开发
  • 图片展示网站php源码wordpress 代码分析
  • 网站建设信息稿冒用网站备案号建设网站
  • qq空间网站根目录织梦网站修改教程视频教程
  • 自己如何制作一个网站寻找客户的渠道和方法
  • 阿里云虚拟主机建站教程企业公示信息查询系统山西
  • 塘厦东莞网站建设开发工具在哪里找
  • 做一个网站的建设过程北京专业网站建设网站推广
  • 做网站难度什么都可以看的浏览器
  • 建站教学视频网站色彩的应用
  • 做淘宝主要看哪些网站有哪些内容襄阳头条新闻
  • 一起做陶瓷的网站wordpress分库
  • 10有免费建网站哈尔滨网站建设效果
  • 网站建设与网页制作实训报告新媒体营销岗位职责说明书
  • 营销型网站建设报价方案郑州市网站建设怎么样
  • nginx网站建设网站显示wordpress
  • 各类大型网站建设天蓝色网站
  • 自己做网站推广产品个人简历(电子版)
  • 可信网站十大软件免费下载网站排行榜