@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建立數萬客戶端連線,並主動發訊息
相關文章
- vncserver建立與客戶端連線VNCServer客戶端
- Redis客戶端連線數DevOpsRedis客戶端dev
- impala客戶端連線客戶端
- Redis客戶端連線Redis客戶端
- netty服務端監聽客戶端連線加入和斷開事件Netty服務端客戶端事件
- linux之客戶端連線數統計Linux客戶端
- 客戶端段建立到伺服器端的連線過程客戶端伺服器
- Spring Boot+Socket實現與html頁面的長連線,客戶端給伺服器端發訊息,伺服器給客戶端輪詢傳送訊息,附案例原始碼Spring BootHTML客戶端伺服器原始碼
- mysql、redis 客戶端連線池MySqlRedis客戶端
- nio 當客戶端主動關閉連線,伺服器端怎麼才能知道客戶端伺服器
- IM撤回訊息-iOS客戶端實現iOS客戶端
- Aeron訊息傳遞客戶端--Go版客戶端Go
- python中socket建立客戶連線Python
- Netty原始碼分析(三):客戶端啟動Netty原始碼客戶端
- TCP協議服務端和客戶端的連線與通訊TCP協議服務端客戶端
- Qt TCP通訊客戶端斷開連線有哪些方法QTTCP客戶端
- 使用swoole作為MQTT客戶端並接收實現即時訊息推送MQQT客戶端
- 從客戶端連線ASM例項客戶端ASM
- java netty 實現 websocket 服務端和客戶端雙向通訊 實現心跳和斷線重連 完整示例JavaNettyWeb服務端客戶端
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- Oracle客戶端連線伺服器教程Oracle客戶端伺服器
- 客戶端連線資料庫的方法客戶端資料庫
- 客戶端連線故障檢查流程手段客戶端
- im客戶端生成訊息序列號演算法客戶端演算法
- Golang 實現客戶端與伺服器端UDP協議連線通訊Golang客戶端伺服器UDP協議
- netty系列之:使用netty搭建websocket客戶端NettyWeb客戶端
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- 訊息中介軟體客戶端消費控制實踐客戶端
- 仿UC客戶端的快速搜尋訊息通知效果客戶端
- 分散式訊息系統Kafka Java客戶端程式碼分散式KafkaJava客戶端
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器
- 客戶端怎麼連線到伺服器?客戶端伺服器
- 配置ORACLE 客戶端連線到資料庫Oracle客戶端資料庫
- MySQL client客戶端的四種連線方式MySqlclient客戶端
- netty訊息分發思路Netty
- 如何實現從 Redis 中訂閱訊息轉發到 WebSocket 客戶端RedisWeb客戶端
- 在Linux 上安裝DB2 8.1 並配置windows 客戶端連線LinuxDB2Windows客戶端
- MQTT 客戶端自動重連實踐|構建可靠 IoT 裝置連線MQQT客戶端