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

品牌网站制作流程怎样做彩票投资网站

品牌网站制作流程,怎样做彩票投资网站,wordpress 菜单对应分类目录,怎么做网站调查表为什么80%的码农都做不了架构师#xff1f; 1.服务端启动流程 这一小节#xff0c;我们来学习一下如何使用 Netty 来启动一个服务端应用程序#xff0c;以下是服务端启动的一个非常精简的 Demo: NettyServer.java public class NettyServer {public static v… 为什么80%的码农都做不了架构师    1.服务端启动流程 这一小节我们来学习一下如何使用 Netty 来启动一个服务端应用程序以下是服务端启动的一个非常精简的 Demo: NettyServer.java public class NettyServer {public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventLoopGroup();NioEventLoopGroup workerGroup new NioEventLoopGroup();ServerBootstrap serverBootstrap new ServerBootstrap();serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializerNioSocketChannel() {protected void initChannel(NioSocketChannel ch) {}});serverBootstrap.bind(8000);} }首先看到我们创建了两个NioEventLoopGroup这两个对象可以看做是传统IO编程模型的两大线程组bossGroup表示监听端口accept 新连接的线程组workerGroup表示处理每一条连接的数据读写的线程组。用生活中的例子来讲就是一个工厂要运作必然要有一个老板负责从外面接活然后有很多员工负责具体干活老板就是bossGroup员工们就是workerGroupbossGroup接收完连接扔给workerGroup去处理。接下来 我们创建了一个引导类 ServerBootstrap这个类将引导我们进行服务端的启动工作直接new出来开搞。我们通过.group(bossGroup, workerGroup)给引导类配置两大线程组这个引导类的线程模型也就定型了。然后我们指定我们服务端的 IO 模型为NIO我们通过.channel(NioServerSocketChannel.class)来指定 IO 模型当然这里也有其他的选择如果你想指定 IO 模型为 BIO那么这里配置上OioServerSocketChannel.class类型即可当然通常我们也不会这么做因为Netty的优势就在于NIO。接着我们调用childHandler()方法给这个引导类创建一个ChannelInitializer这里主要就是定义后续每条连接的数据读写业务处理逻辑不理解没关系在后面我们会详细分析。ChannelInitializer这个类中我们注意到有一个泛型参数NioSocketChannel这个类呢就是 Netty 对 NIO 类型的连接的抽象而我们前面NioServerSocketChannel也是对 NIO 类型的连接的抽象NioServerSocketChannel和NioSocketChannel的概念可以和 BIO 编程模型中的ServerSocket以及Socket两个概念对应上我们的最小化参数配置到这里就完成了我们总结一下就是要启动一个Netty服务端必须要指定三类属性分别是线程模型、IO 模型、连接读写处理逻辑有了这三者之后在调用bind(8000)我们就可以在本地绑定一个 8000 端口启动起来以上这段代码读者可以直接拷贝到你的 IDE 中运行。 2.自动绑定递增端口 在上面代码中我们绑定了 8000 端口接下来我们实现一个稍微复杂一点的逻辑我们指定一个起始端口号比如 1000然后呢我们从1000号端口往上找一个端口直到这个端口能够绑定成功比如 1000 端口不可用我们就尝试绑定 1001然后 1002依次类推。 serverBootstrap.bind(8000);这个方法呢它是一个异步的方法调用之后是立即返回的他的返回值是一个ChannelFuture我们可以给这个ChannelFuture添加一个监听器GenericFutureListener然后我们在GenericFutureListener的operationComplete方法里面我们可以监听端口是否绑定成功接下来是监测端口是否绑定成功的代码片段 serverBootstrap.bind(8000).addListener(new GenericFutureListenerFuture? super Void() {public void operationComplete(Future? super Void future) {if (future.isSuccess()) {System.out.println(端口绑定成功!);} else {System.err.println(端口绑定失败!);}} });我们接下来从 1000 端口号开始往上找端口号直到端口绑定成功我们要做的就是在 if (future.isSuccess())的else逻辑里面重新绑定一个递增的端口号接下来我们把这段绑定逻辑抽取出一个bind方法 private static void bind(final ServerBootstrap serverBootstrap, final int port) {serverBootstrap.bind(port).addListener(new GenericFutureListenerFuture? super Void() {public void operationComplete(Future? super Void future) {if (future.isSuccess()) {System.out.println(端口[ port ]绑定成功!);} else {System.err.println(端口[ port ]绑定失败!);bind(serverBootstrap, port 1);}}}); }然后呢以上代码中最关键的就是在端口绑定失败之后重新调用自身方法并且把端口号加一然后在我们的主流程里面我们就可以直接调用 bind(serverBootstrap, 1000)端口成功绑定了在1024从 1000 开始到 1023端口均绑定失败了这是因为在我的 MAC 系统下1023 以下的端口号都是被系统保留了需要 ROOT 权限才能绑定。 以上就是自动绑定递增端口的逻辑接下来我们来一起学习一下服务端启动我们的引导类ServerBootstrap除了指定线程模型IO 模型连接读写处理逻辑之外他还可以干哪些事情 3.服务端启动其他方法 handler() 方法 serverBootstrap.handler(new ChannelInitializerNioServerSocketChannel() {protected void initChannel(NioServerSocketChannel ch) {System.out.println(服务端启动中);} })handler()方法呢可以和我们前面分析的childHandler()方法对应起来childHandler()用于指定处理新连接数据的读写处理逻辑handler()用于指定在服务端启动过程中的一些逻辑通常情况下呢我们用不着这个方法。 attr() 方法 serverBootstrap.attr(AttributeKey.newInstance(serverName), nettyServer)attr()方法可以给服务端的 channel也就是NioServerSocketChannel指定一些自定义属性然后我们可以通过channel.attr()取出这个属性比如上面的代码我们指定我们服务端channel的一个serverName属性属性值为nettyServer其实说白了就是给NioServerSocketChannel维护一个map而已通常情况下我们也用不上这个方法。 那么当然除了可以给服务端 channel NioServerSocketChannel指定一些自定义属性之外我们还可以给每一条连接指定自定义属性 childAttr() 方法 serverBootstrap.childAttr(AttributeKey.newInstance(clientKey), clientValue)上面的childAttr可以给每一条连接指定自定义属性然后后续我们可以通过channel.attr()取出该属性。 childOption() 方法 serverBootstrap.childOption(ChannelOption.SO_KEEPALIVE, true).childOption(ChannelOption.TCP_NODELAY, true)childOption()可以给每条连接设置一些TCP底层相关的属性比如上面我们设置了两种TCP属性其中 ChannelOption.SO_KEEPALIVE表示是否开启TCP底层心跳机制true为开启ChannelOption.TCP_NODELAY表示是否开始Nagle算法true表示关闭false表示开启通俗地说如果要求高实时性有数据发送时就马上发送就关闭如果需要减少发送次数减少网络交互就开启。其他的参数这里就不一一讲解有兴趣的同学可以去这个类里面自行研究。 option() 方法 除了给每个连接设置这一系列属性之外我们还可以给服务端channel设置一些属性最常见的就是so_backlog如下设置 serverBootstrap.option(ChannelOption.SO_BACKLOG, 1024)表示系统用于临时存放已完成三次握手的请求的队列的最大长度如果连接建立频繁服务器处理创建新连接较慢可以适当调大这个参数 4.总结 本文中我们首先学习了 Netty 服务端启动的流程一句话来说就是创建一个引导类然后给他指定线程模型IO模型连接读写处理逻辑绑定端口之后服务端就启动起来了。然后我们学习到 bind 方法是异步的我们可以通过这个异步机制来实现端口递增绑定。最后呢我们讨论了 Netty 服务端启动额外的参数主要包括给服务端 Channel 或者客户端 Channel 设置属性值设置底层 TCP 参数。 以上内容来源于掘金小册《Netty 入门与实战仿写微信 IM 即时通讯系统》若想获得更多更详细的内容请用微信扫码订阅 转载于:https://my.oschina.net/funcy/blog/2242215
http://www.zqtcl.cn/news/170281/

相关文章:

  • 农机网站建设目标上海网站建设工资多少
  • 手机做网站过程网站名字做版权需要源代码吗
  • 公司微信网站建设方案现在做外贸前景如何
  • 如何使用微信公众号做网站河南省专业做网站公司
  • 清远市清城区网站建设公司广州黄浦区建设局网站
  • 站长做2个网站网站程序指的是什么
  • 网站建设jw100请拿笔记记下新域名
  • 兰州市住房保障和城乡建设局网站如何有效的推广网站
  • 网站推广做百度还是360北京企业网站建设费用
  • 推荐一个简单的网站制作策划方案免费网站
  • 用vs2012做网站案例企业现在有必要做网站吗
  • 网站建设少用控件wordpress默认分类
  • php网站是什么数据库文件网站开发收
  • 新网网站空间做网站和app哪类商标
  • drupal网站建设数据库厦门市网站建设
  • 解释微信微网站室内设计效果图展板
  • 教做发绳的网站游戏网站建设需要多少钱
  • 那个网站可以做双色球号码对比的网站设计好学吗
  • 网站建设如何获取客户韩国建筑网站
  • 固始网站建设公司wordpress会员功能
  • 在哪找做调查赚钱的网站好自己做网站的成本
  • 网站开发职业xshuan主题wordpress
  • 网站代码框架建设网站需要学什么程序
  • 广州搜索seo网站优化企业邮箱密码忘了怎么重置密码
  • 重庆模板网站建设做新房网站怎么弄
  • 深圳做企业网站公司常用的网络营销方式
  • 建设网站公司怎么建站网站开发笔记
  • 网站网页建设论文惠州建设网站公司
  • 中介做网站的别打电话有没有教做健身餐的网站
  • 山东电力建设网站雷州市网站建设