## 綁定端口并啟動
```
public void start() {
try {
// 綁定端口,同步等待成功
ChannelFuture future = server.bind(new InetSocketAddress(8888)).sync();
// 等待服務監聽端口關閉
future.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// 優雅退出,釋放線程池資源
mainGroup.shutdownGracefully();
subGroup.shutdownGracefully();
}
}
```
### 遇到過的問題
使用`new InetSocketAddress(8888)`無法啟動:
原因:多網卡;
```
public void start() {
this.future = server.bind("192.168.30.51",8888);
if (future.isSuccess()) {
log.info("啟動 Netty 成功");
}
}
```
## Netty線程組啟動時,默認線程為多少?
```
public abstract class MultithreadEventLoopGroup extends MultithreadEventExecutorGroup implements EventLoopGroup {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(MultithreadEventLoopGroup.class);
private static final int DEFAULT_EVENT_LOOP_THREADS;
static {
DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(
"io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2));
if (logger.isDebugEnabled()) {
logger.debug("-Dio.netty.eventLoopThreads: {}", DEFAULT_EVENT_LOOP_THREADS);
}
}
...
}
```
默認取-Dio.netty.eventLoopThreads,如果該系統參數也沒有指定,則為可用的CPU內核數 × 2。
## 其他資料
1. [netty源碼淺析--線程啟動](https://blog.csdn.net/c275046758/article/details/52262167)
- 寫在前面
- 如何閱讀源碼
- 第一部分 開源框架
- Netty
- 啟動過程
- SpringSecurityOauth2
- Quartz
- quartz啟動原理
- quartz定時調度任務觸發流程
- 第二部分 優質中間件源碼分析
- Canal
- Canal是如何偽裝為mysql的slave的?
- canal源碼調試
- Sentinel
- 核心概念梳理
- 滑動窗口實現原理
- jvm-sandbox
- jvm-sandbox-repeater
- Windows環境安裝
- 結果比對
- 第三部分 優質行業項目源碼分析
- 第一章 分庫分表實踐
- sharding-jdbc
- 第二章 DDD領域驅動
- 享同科技DDD開源框架
- J-IM
- 功能測試
- 悟空CRM
- 項目搭建
- 默認密碼
- dataX-web
- 項目搭建
- 部署報錯
- dolphinscheduler
- awescnb
- geek
- chrome插件-funds
- 優質開源項目備忘