@Slf4j
public class NettyClientTest
{
public static void main(String[] args) throws Exception
{
EventLoopGroup workerEventLoopGroup = new NioEventLoopGroup();
try {
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(workerEventLoopGroup)
.option(ChannelOption.SO_REUSEADDR, true)
.channel(NioSocketChannel.class)
.handler(new MyClientChannelInitializer());
List<Channel> channels = new ArrayList<>();
for( int i=0; i<60000; i++ ){ // 這裡建立60000個連線,實驗時建立了兩萬多個連線就報錯了
log.info("count: {}", i);
channels.add(bootstrap.connect("localhost", 8080).sync().channel());
}
schedule(channels);
for( Channel channel : channels ){
channel.closeFuture().sync();
}
} finally {
// 6. 關閉工作執行緒組
workerEventLoopGroup.shutdownGracefully();
}
}
private static void schedule(List<Channel> channels){
// 啟動一個執行緒來不斷讓客戶發訊息給服務端
new Thread(new MyScheduleRunnable(channels)).start();
}
private static class MyScheduleRunnable implements Runnable {
private List<Channel> channels;
private Random random = new Random();
public MyScheduleRunnable(List<Channel> channels)
{
this.channels = channels;
}
@Override
public void run() {
int seq = 0;
while(true){
try {
Thread.sleep(1000L);
int index = random.nextInt(channels.size());
Channel channel = channels.get(index);
// 呼叫channel.pipeline的方法寫資料出去,channel是執行緒安全的
channel.pipeline().writeAndFlush(""+(seq++));
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
}
netty建立數萬客戶端連線,並主動發訊息
相關文章
- Redis客戶端連線數DevOpsRedis客戶端dev
- impala客戶端連線客戶端
- netty服務端監聽客戶端連線加入和斷開事件Netty服務端客戶端事件
- python中socket建立客戶連線Python
- Spring Boot+Socket實現與html頁面的長連線,客戶端給伺服器端發訊息,伺服器給客戶端輪詢傳送訊息,附案例原始碼Spring BootHTML客戶端伺服器原始碼
- Netty原始碼分析(三):客戶端啟動Netty原始碼客戶端
- mysql、redis 客戶端連線池MySqlRedis客戶端
- netty系列之:使用netty搭建websocket客戶端NettyWeb客戶端
- IM撤回訊息-iOS客戶端實現iOS客戶端
- 使用swoole作為MQTT客戶端並接收實現即時訊息推送MQQT客戶端
- TCP協議服務端和客戶端的連線與通訊TCP協議服務端客戶端
- Qt TCP通訊客戶端斷開連線有哪些方法QTTCP客戶端
- java netty 實現 websocket 服務端和客戶端雙向通訊 實現心跳和斷線重連 完整示例JavaNettyWeb服務端客戶端
- SseEmitter 伺服器向客戶端推送訊息MIT伺服器客戶端
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- im客戶端生成訊息序列號演算法客戶端演算法
- 騰訊 客戶端開發 QT客戶端QT
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- Netty入門系列(1) --使用Netty搭建服務端和客戶端Netty服務端客戶端
- Golang 實現客戶端與伺服器端UDP協議連線通訊Golang客戶端伺服器UDP協議
- netty系列之:手持framecodec神器,建立多路複用http2客戶端NettyHTTP客戶端
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- 客戶端怎麼連線到伺服器?客戶端伺服器
- MQTT 客戶端自動重連實踐|構建可靠 IoT 裝置連線MQQT客戶端
- netty系列之:搭建客戶端使用http1.1的方式連線http2伺服器Netty客戶端HTTP伺服器
- netty系列之:自建客戶端和HTTP伺服器互動Netty客戶端HTTP伺服器
- 如何建立NEO輕客戶端客戶端
- 使用 Webix 建立 Email 客戶端WebAI客戶端
- 訊息中介軟體客戶端消費控制實踐客戶端
- 如何實現從 Redis 中訂閱訊息轉發到 WebSocket 客戶端RedisWeb客戶端
- Presto學習筆記——Go客戶端連線PrestoREST筆記Go客戶端
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- HTTP客戶端連線,選擇HttpClient還是OkHttp?HTTP客戶端client
- 4.2.14 啟用客戶端快速連線故障轉移客戶端
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- ESP作為單連線中的TCP客戶端TCP客戶端
- MQTT 客戶端自動重連最佳實踐|構建可靠 IoT 裝置連線MQQT客戶端
- Spring Boot 整合 WebSocket 實現服務端推送訊息到客戶端Spring BootWeb服務端客戶端