新しいJavaソケットNIOについて少し研究しました。私は多くのクライアント(約1000)からの接続を受け取り、それらから受信したデータを処理するシミュレートされたサーバを構築するためにMINAを使用しています。また、約300のクライアント接続を作成し、スレッドを使用してサーバーにデータを送信するクライアントシミュレータを設定しました。その結果、サーバーによって接続の一部が中断されます。だから、400java.nioのセレクタは一度にどれだけ選択できますか?
for (int i = 0; i < SIZE; i++) {
clients[i] = new Client(i);
pool[i] = new Thread(clients[i]);
pool[i].start();
}
- コードが
try {
listener = new NioSocketAcceptor(ioThread);
listener.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MessageCodecFactory()));
listener.getFilterChain().addLast("thread", new ExecutorFilter(100, 150));
listener.setHandler(new IncomingMessageHandler(serverMessageHandler));
listener.bind(new InetSocketAddress(PORT));
}
catch (IOException ioe) {
}
を下回っており、ここでは、ハンドラで、セッションは、クライアント
@Override
public void sessionCreated(IoSession session) throws Exception {
new Session(session.getRemoteAddress(), handler, session);
super.sessionCreated(session);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
Message m = Message.wrap((MessagePOJO)message);
if (m != null) {
Session s = SessionManager.instance.get(session.getRemoteAddress());
if (s != null) {
s.submit(m);
ArmyServer.instance.tpe.submit(s);
}
}
super.messageReceived(session, message);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
Session s = SessionManager.instance.get(session.getRemoteAddress());
if (s != null)
s.disconnect();
super.sessionClosed(session);
}
とクライアントシミュレーター、SIZE〜300からの各接続のための私のクラスであります問題は、ミナが一度にどれくらいの接続を受け入れることができるかということです。それとも、コードに間違いがありますか?
暫定プレビューで正しい書式設定を見たことがありますが、このようになりました。混乱のために申し訳ありません... – noob