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

网站制作和收费标准怎样推广自己的视频号

网站制作和收费标准,怎样推广自己的视频号,网站建设培训内容,wordpress支持pdo前言 本来这篇应该紧接着说明Future和Promise。 但是考虑前文第三篇即用到了ServerBootstrap来启动一个服务器#xff0c;并且我读的闪电侠netty#xff0c;先写的服务器与客户端启动这部分。索性就先写出来了。主要内容来自闪电侠netty ServerBootstrap ServerBootstrap就…前言 本来这篇应该紧接着说明Future和Promise。 但是考虑前文第三篇即用到了ServerBootstrap来启动一个服务器并且我读的闪电侠netty先写的服务器与客户端启动这部分。索性就先写出来了。主要内容来自闪电侠netty ServerBootstrap ServerBootstrap就是一个辅助我们把服务器拉起来的辅助类怎么用直接看下面。 服务器编写 解释全写在注释里方便看。 示例程序是书里的。 public class NettyServer{public static void main(String[] args){//下面我们可以看到用了两个EventLoopGroup一个作为boss一个作为worker。//boss内的EventLoop负责处理连接请求。//worker中则是负责连接后的channel的io请求处理。NioEventLoopGroup bossGroup newNioEventLoopGroup();NioEventLoopGroup workerGroup newNioEventLoopGroup();ServerBootstrap serverBootstrap newServerBootstrap();serverBootstrap.group(bossGroup, workerGroup)//给服务器指定boss和worker。两个线程组职能分离.channel(NioServerSocketChannel.class)//这里使用NIO类型的ServerSocketChannel。也有其他类型不过常用NIO类型的。//childHandler之前第三篇文章说过child指代ServerSocketChannel处理连接请求后产生的新的SocketChannel所以childHandler表示对服务器连接的Channel添加的处理器。也即对Channel的数据读写如何进行处理。第三篇文章讲到了。.childHandler(newChannelInitializerNioSocketChannel(){protectedvoid initChannel(NioSocketChannel ch){}})//绑定一个端口serverBootstrap.bind(8000);} }梳理一下就是用ServerBootstrap 类指定groupIo模型channel写新连接的读写处理逻辑绑定端口。 这里注意bind操作是一个异步操作 且我们要绑定的端口可能已经被其他应用占用了。所以需要我们递增寻找一个没有被占用的端口。 我们在第四篇文章中说到有这个ChannelFuture处理异步结果。 而这个bind也是一个异步操作也会返回一个ChannelFuture。 我们正好可以对bind操作产生的ChannelFuture添加一个回调来进行递增寻找端口的操作。 端口递增绑定 比如端口9000被占用了我们要继续去bind 9001直到找到一个可用端口。 //下面代码是一个框架可以通过future的状态来做不同处理(关于future的状态下篇来讲这里可以理解为通过isSuccess()可以了解到bind操作是否成功) //成功不用多说失败了就要递增访问端口号。 serverBootstrap.bind(8000).addListener((ChannelFutureListener) future - {if(future.isSuccess()){}else{serverBootstrap.bind(8001);} })//书里这个代码挺妙的 //我们发现直接在else部分写一个bind操作似乎不行因为这个bind操作做完失败的话我们就没有后续了。 //抽象一下似乎无限复制代码在else部分再写一个bind(8000).addListener..然后在其内部再写一个逻辑判断再进行bind。 //失败就不断调用本身递归思想private static void Bind(ServerBootstrap serverBootstrap, int port){serverBootstrap.bind(8000).addListener((ChannelFutureListener) future - {if(future.isSuccess()){system.out.println(端口 port 绑定成功 );}else{system.out.println(端口 port 绑定失败 );Bind(serverBootstrap,port1); }}) } 其他方法 这些方法课上确实没咋说书里这里带了一笔。 //handler方法和上文的childHandler一样第三篇文章说到了。 //childHandler用于给新Channel指定读写操作的处理逻辑 //handler就是给服务器启动过程指定一些逻辑。通常用不到 serverBootstrap.handler(newChannelInitializerNioServerSocketChannel(){protected void initChannel(NioServerSocketChannel ch) {System.out.println(服务端启动中)} })//attr和childAttr两个方法都是给Channel添加一个键值对。attr是给ServerSocketChannel的。childAttr是给所有正常连接channel的。 //即Channel内部会维护一个Map存储这些键值对。要取可以再用attr或者childAttr根据键来取属性值 serverBootstrap.attr(AttributeKey.newInstance(serverName), nettyServer) serverBootstrap.childAttr(AttributeKey.newInstance(clientKey), clientValue)//option和childOption方法是设置TCP参数的。 //同样一个针对ServerSocketChannel。childOption针对其他正常连接channel //书中给了几个例子 serverBootstrap //表示系统用于临时存放已完成三次握手的请求的队列的最大长度如果连接建立频繁服务器处理创建新连接较慢则可以适当调大这个参数。 .option(ChannelOption.SO_BACKLOG, 1024) //ChannelOption.SO_KEEPALIVE表示是否开启TCP底层心跳机制true表示开启。 .childOption(ChannelOption.SO_KEEPALIVE, true) //ChannelOption.TCP_NODELAY表示是否开启Nagle算法true表示关闭false表示开启。通俗地说如果要求高实时性有数据发送时就马上发送就设置为关闭如果需要减少发送次数减少网络交互就设置为开启。 .childOption(ChannelOption.TCP_NODELAY, true) Bootstarp 与ServerBootstrap类似不过Bootstrap是用于启动客户端的辅助类。 客户端启动 同样是指定线程模型groupIO模型NioSocketChannelIO操作处理逻辑handler。 其实同服务器启动基本一致。 不过这里书里提到了连接失败的重试处理。我们来看看 NioEventLoopGroup workerGroup newNioEventLoopGroup() Bootstrap bootstrap newBootstrap() bootstrap // 1.指定线程模型 .group(workerGroup) // 2.指定IO 类型为NIO .channel(NioSocketChannel.class) // 3.IO 处理逻辑 .handler(newChannelInitializerSocketChannel(){Overridepublicvoid initChannel(SocketChannel ch){} }); // 4.建立连接 bootstrap.connect(juejin.cn, 80).addListener(future - if(future.isSuccess()){System.out.println(连接成功);}else{System.err.println(连接失败);} }); //我们见到与上面服务器创建时我们要做端口递增绑定类似的部分。 //这里原理类似因为connect与bind都是异步方法所以我们要写好异步回调表明在异步操作成功后做什么失败后做什么 //connect失败说明连接失败。我们可以用重试一定次数后放弃连接并且不会在失败后立即重连指数增长重试事件如1秒2秒4秒8秒等。默认次数设为5次下面是实现逻辑。 //也采用封装一个递归函数来递归调用的方法。 private static void connect(Bootstrap bootstrap,String host,int port,int retry){bootstrap.connect(host, port).addListener(future -{if(future.isSuccess()){System.out.println(连接成功);}else if(retry 0) {System.err.println(重试次数已用完放弃连接);}else{// 第几次重连int order (MAX_RETRY - retry) 1;// 本次重连的间隔int delay 1 order;System.err.println(newDate() 连接失败第 order 次重连……);bootstrap.config().group().schedule(() - connect(bootstrap, host, port,retry--), delay, TimeUnit.SECONDS);}}); } 上面代码比较好懂 不过这里等待一定时间后执行任务的操作即定时任务操作用了bootstrap.config().group().schedule()来做。 在group()返回我们配置的workerGroup。schedule()正是其中的方法来定时执行一个任务。 在上面最后的else中根据剩余重试次数retry来确定本次重试之前要等多长时间即delay再通过schedule()递归调用函数本身不过递归函数的参数retry要减1因为它代表剩余重试次数。 其他方法 同ServerBootstrap一样Bootstrap也有attr方法来给Channel设置键值对。不再赘述。 也有option方法来设置TCP参数。 书中给了如下参数 .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .option(ChannelOption.SO_KEEPALIVE, true) .option(ChannelOption.TCP_NODELAY, true)● ChannelOption.CONNECT_TIMEOUT_MILLIS表示连接的超时时间超过这个时间如果仍未连接到服务端则表示连接失败。 ● ChannelOption.SO_KEEPALIVE表示是否开启TCP底层心跳机制true表示开启。 ● ChannelOption.TCP_NODELAY表示是否开始Nagle算法true表示关闭false表示开启。通俗地说如果要求高实时性有数据发送时就马上发送就设置为true如果需要减少发送次数减少网络交互就设置为false。 结语 本文内容均来自《跟着闪电侠学Netty》。 看了看书感觉挺有帮助的。技术还是视频书籍源码实践相辅相成好。 本篇仅是对ServerBootstrap与Bootstrap的补充说明后续还会按视频课程的编排来写。中间穿插一些书中写到但是视频没有提到的东西。 下篇就是开头说要写的Promise和Future了。篇幅应该不长只写一点。 按顺序再后面应该是handler与pipeline还有ByteBuf。 这里稍微说下这本书里的内容其实和课程中很多部分都是重复的毕竟说的都是Netty吗。 然后我对比了一下二者的基础部分书接下来讲的通信协议编解码Pipeline与ChannelHandler粘包拆包双向通信。实现一个简单群聊。这些视频同样讲到了。可能有几个章节是二者独有的。二者可以对比学习。效果应该会更好吧。 后面写我尽量结合两边来写。 感谢阅读欢迎批评指正。
http://www.w-s-a.com/news/519954/

相关文章:

  • 网站开发面试自我介绍软件下载网站如何建设
  • 可以做翻译任务的网站陕西省建设厅八大员证
  • 昆明 网站推广重庆网页优化seo公司
  • 网站排名下降怎么上去设计一套app页面多少钱
  • 专门用来查找网址的网站查公司名字是否被注册
  • 自己创建网站教程河南省建设厅官方网站李学军
  • 一个网站需要多少容量怎样免费设计网站建设
  • 建设工程交易中心网站12306的网站是哪个公司做的
  • 建设网站经营范围自己给公司做网站
  • 河北省住房建设厅政务网站网络营销推广的岗位职责有哪些
  • 上海网站建设优化价格孝义做网站的公司
  • 哪个公司网站做的最好义乌 网站 制作
  • 百度站长工具综合查询wordpress 上传pdf
  • 旅游短租公寓网站建设深圳龙岗招聘网
  • 做海淘是在哪个网站网络查控系统设计方案
  • o2o网站建设代理商微信公众号开发文档
  • 网站设计课程总结关于网站备案的公告
  • 网站建设与运营意义到哪查找网站域名
  • 网站及单位网站建设情况眉县住房和城市建设局网站
  • 网站是否能够被恶意镜像wordpress占用
  • 经典设计网站网站等保测评怎么做
  • 重庆做网站公司贴吧廊坊公司快速建站
  • 海外贸易在什么网站做怎么排名到百度第一页
  • 线上注册公司是在哪个网站做高仿网站
  • 网站构架图网上推广平台哪个好
  • 公司网站首页图片素材vi设计的目的和意义
  • 网站的需求分析都有哪些内容济南营销型网站建设团队
  • 怎么选择优秀的网站建设公司生鲜网站开发
  • 如何编写网站建设销售的心得网站的权限管理怎么做
  • 网站业务员好做吗无忧网站优化