我對新的java套接字NIO做了一點研究。我正在使用MINA構建一個模擬服務器,該服務器接受來自多個客戶端(大約1000個)的連接並處理從它們接收到的數據。我還設置了客戶端模擬器,它可以創建大約300個客戶端連接,並使用線程將數據發送到服務器。結果是一些連接被服務器中止。代碼如下java.nio中的選擇器可以一次選擇多少個連接?
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級 - 400
for (int i = 0; i < SIZE; i++) {
clients[i] = new Client(i);
pool[i] = new Thread(clients[i]);
pool[i].start();
}
所以問題是Mina每次可以接受多少個連接?或者在我的代碼中有任何錯誤?
糟糕,我確定我在草稿預覽中看到了正確的格式,但事實證明是這樣的。對不起,這個爛攤子... – noob 2010-11-22 08:34:55