2012-04-04 25 views
1

私はwebsocketサーバーの負荷テスト用のツールをコーディングしています。私は、サーバーへのクライアント接続をたくさん(数万)作成する必要があります。複数のクライアントブートストラップの問題

私はいくつかのクライアントクラスを持っています。私は、次のコードを持ってrun()メソッドでは

  1. (私のハンドラを持つとwebscoketクライアントhandshaker)ChannelPipelineFactory
  2. ClientBootstrap

:このクラスの中に、私は、新しいバージョンを作成

public void run() { 
    clientBootstrap.setPipelineFactory(clientChannelPipelineFactory); 

    ChannelFuture future = clientBootstrap.connect(
     new InetSocketAddress(
      clientConfiguration.getHost(), 
      clientConfiguration.getPort() 
     ) 
    ); 

    try { 
     future.awaitUninterruptibly().rethrowIfFailed(); 

     WebSocketClientHandshaker handshaker = clientChannelPipelineFactory.getHandshaker(); 

     channel = future.getChannel(); 
     handshaker.handshake(channel).awaitUninterruptibly().rethrowIfFailed(); 
    } catch (Exception e) { 
     log.error("Error in the client channel", e); 
     stop(); 
    } 
} 

ChannelFutureによって返されるチャンネルは、クライアントのフィールドとして保存されます。

私は自分の仕事をして、開いているすべてのチャンネルを閉じようとしています。 stop()メソッド:すべてのチャネルを終了します。すべてのチャネルを閉じます。

p.s.すべてのチャンネル(シングルスレッド)を閉じ コード:

for (FSBBridgeServerClient client : clients) { 
     for (FSBBridgeServerClient subClient : clients) { 
      log.debug("c:" + subClient.getChannel()); 
      log.debug("c:" + subClient.getChannel().isOpen()); 
     } 
     client.stop(); 
} 

いくつかのデバッグログ:

2012-04-04 17:19:29,441 DEBUG [main] ClientApp - c:[id: 0x2344b18f, /127.0.0.1:38366 => localhost/127.0.0.1:5544] 
2012-04-04 17:19:29,441 DEBUG [main] ClientApp - c:true 
2012-04-04 17:19:29,442 DEBUG [main] ClientApp - c:[id: 0x01c20eb7, /127.0.0.1:38367 => localhost/127.0.0.1:5544] 
2012-04-04 17:19:29,442 DEBUG [main] ClientApp - c:true 


2012-04-04 17:19:34,414 DEBUG [main] ClientApp - c:[id: 0x2344b18f, /127.0.0.1:38366 :> localhost/127.0.0.1:5544] 
2012-04-04 17:19:34,414 DEBUG [main] ClientApp - c:false 
2012-04-04 17:19:34,414 DEBUG [main] ClientApp - c:[id: 0x01c20eb7, /127.0.0.1:38367 :> localhost/127.0.0.1:5544] 
2012-04-04 17:19:34,414 DEBUG [main] ClientApp - c:false 

答えて

1

私はあなたの問題はclientBootstrap.releaseExternalResources();を呼び出していると思います。

documentationによると、このメソッドは単に呼び出しをChannelFactory.releaseExternalResources()に委譲します。

+0

ありがとうございました。問題だったようです。 –

関連する問題