【闪电侠学netty】第4章 服务端启动流程
【Netty】读书笔记 - 跟闪电侠学
1. 内容概要
1 服务端启动最小化代码
启动服务器步骤
- Step1:线程模型,服务器引导类ServerBootstrap
- Step2:IO 模型
- Step3:IO 处理逻辑
- Step4:绑定本地端口,启动服务
public class NettyServer {private static final int BEGIN_PORT = 8000;public static void main(String[] args) {//boosGroup :监听端口,接收新连接的线程组//workerGroup :处理每一个连接的数据读写的线程组NioEventLoopGroup boosGroup = new NioEventLoopGroup();NioEventLoopGroup workerGroup = new NioEventLoopGroup();final ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(boosGroup, workerGroup)//Step1:线程模型.channel(NioServerSocketChannel.class)//Step2:IO模型.childHandler(new ChannelInitializer<NioSocketChannel>() {protected void initChannel(NioSocketChannel ch) {//Step3:连接读写处理逻辑System.out.println(ch.attr(clientKey).get());}});//Step4:绑定本地端口,启动服务serverBootstrap.bind(8000);}
}
2 自动绑定递增端口
绑定监听器,监听端口是否绑定成功,不成功继续绑定下一个端口port+1
public class NettyServer {private static final int BEGIN_PORT = 8000;public static void main(String[] args) {NioEventLoopGroup boosGroup = new NioEventLoopGroup();NioEventLoopGroup workerGroup = new NioEventLoopGroup();final ServerBootstrap serverBootstrap = new ServerBootstrap();final AttributeKey<Object> clientKey = AttributeKey.newInstance("clientKey");serverBootstrap.group(boosGroup, workerGroup).channel(NioServerSocketChannel.class).attr(AttributeKey.newInstance("serverName"), "nettyServer").childAttr(clientKey, "clientValue").option(ChannelOption.SO_BACKLOG, 1024).childOption(ChannelOption.SO_KEEPALIVE, true).childOption(ChannelOption.TCP_NODELAY, true).childHandler(new ChannelInitializer<NioSocketChannel>() {protected void initChannel(NioSocketChannel ch) {System.out.println(ch.attr(clientKey).get());}});bind(serverBootstrap, BEGIN_PORT);}private static void bind(final ServerBootstrap serverBootstrap, final int port) {serverBootstrap.bind(port).addListener(future -> {if (future.isSuccess()) {System.out.println("端口[" + port + "]绑定成功!");} else {System.err.println("端口[" + port + "]绑定失败!");bind(serverBootstrap, port + 1);}});}
}
3 服务端启动的其他方法
如 serverBootstrap.childHandler()
方法名 | 是否常用 | 描述 |
handler() | 否 | 用于指定在服务器启动过程中的一些逻辑 |
childHandler() | 是 | 用于指定处理新连接数据的读写处理逻辑 |
attr() | 否 | 给服务端Channel指定自定义属性,通过channel.attr()取出属性 |
childattr() | 是 | 给每一个连接指定自定义属性,通过channel.attr()取出属性 |
option() | 是 |
serverBootstrap 给服务器设置一些TCP参数,最常见的是so_backlog so_backlog:临时存放已完成三次握手的请求队列的最大长度,服务器创建新连接较慢,可以调大这个参数 |
childoption() | 是 |
serverBootstrap ChannelOption.SO_KEEPALIVE:是否开启TCP底层心跳机制,true:开启 ChannelOption.TCP_NODELAY:是否开启Nagle算法,true:关闭,false: 开启 通俗讲,要求高实时性,有数据马上发送就设置true:关闭 |
【闪电侠学netty】第4章 服务端启动流程相关推荐
- Netty实战 IM即时通讯系统(四)服务端启动流程
## Netty实战 IM即时通讯系统(四)服务端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...
- 《netty入门与实战》笔记-02:服务端启动流程
为什么80%的码农都做不了架构师?>>> 1.服务端启动流程 这一小节,我们来学习一下如何使用 Netty 来启动一个服务端应用程序,以下是服务端启动的一个非常精简的 Demo ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- 服务端_说说Netty服务端启动流程
点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://yeming.me/2016/03/12/netty1/ netty服务端代码分析 服务端启动配置 ...
- redis server服务端启动流程分析(一)
1.server.c main()服务启动的入口 下面是redis启动的入口程序server.c,简单列了主程序中比较关键的一些点. ## server.c int main(int argc, ch ...
- Gaea源码阅读(三):服务端启动流程
转载地址:http://blog.csdn.net/m_vptr/article/details/9163319 相对于客户端,服务器端工作就比较多了.服务器端需要load jar包,利用fliter ...
- 【Netty】读书笔记 - 跟闪电侠学netty
前言:本篇只是笔者的读书总结,推荐结合原书观看(推荐指数:5星) 上篇 入门实战 第1章 即时聊天系统简介 第2章 Netty是什么 第3章 Netty开发环境配置 第4章 服务端启动流程 第5章 客 ...
- 原理剖析-Netty之服务端启动工作原理分析(上)
一.大致介绍 1.Netty这个词,对于熟悉并发的童鞋一点都不陌生,它是一个异步事件驱动型的网络通信框架: 2.使用Netty不需要我们关注过多NIO的API操作,简简单单的使用即可,非常方便,开发门 ...
- 【闪电侠学netty】第6章 客户端与服务端双向通信
[Netty]读书笔记 - 跟闪电侠学netty 1. 内容概要 1.1 本节实现功能 客户端:连接服务器,之后向服务器发送数据 服务端:接收数据后打印,并向客户端发送数据 1.2 本节知识点 1.2 ...
最新文章
- AbstractFactory抽象工厂模式(创建型模式)
- jQuery Mobile 教程
- php删除垃圾文件,Python删除windows垃圾文件的方法
- 如何:添加缺少的 ContentPlaceHolder
- session的简介
- WORD如何关闭标题段落分页功能?
- Python函数默认值参数的2个坑
- Bootstrap框架(基础篇)之列表,表格,表单
- cobbler报错:No such command: --get-loaders解决方案
- php 监听模式,总结Laravel事件系统用法(监听事件,观察者模式)
- 2022张宇考研基础30讲 第八讲 一元函数积分学的概念与计算
- 软件测试环境有几种,什么是软件测试环境_软件测试环境有哪几种_做软件测试要用到什么工具...
- java 首字母小写转换_java实现将字符串中首字母转换成大写,其它全部转换成小写的方法示例...
- 用几行代码写的bat小病毒
- 中兴b860a拆机_【中兴ZXV10B860A魔盒外观展示】接口|线材|插线_摘要频道_什么值得买...
- 微软卸载工具msicuu2(附带资源)
- 去中心化存储的QoS是什么?
- 多种代码生成炫酷代码雨(推荐)
- 使用POJO对象绑定请求参数
- 安卓SoundPool播放声音(及具体参数解析)