2010-07-20 3 views
0

Я работаю с классом ServerSocket и открывать темы, когда новый клиент попадает в ServerSocket:будет ServerSocket (порт) и многопоточность работает хорошо для 5000 одновременных клиентов хиты?

serverSocket = new ServerSocket(port); 

while (true) { 
     Socket clientSocket = serverSocket.accept(); 
     new Thread(this).start();//opening multiple threads 
} 

но когда 5000 клиентов попадает на эту ServerSocket ошибка показывает на стороне клиента: java.net.ConnectException: Connection refused: connect

Пожалуйста скажите мне, что является лучшим способом открыть серверный сервер, чтобы он мог принимать все клиентские соединения? существует промежуток времени в 1 миллисекунду между одновременными подключениями клиентов.

+0

Что говорит журнал на стороне сервера? Возможно, вам нужно настроить пределы дескриптора файла. –

+0

ошибок на сервере не работает. проблема с соединением проблемы на стороне клиента во время соединения сокета. clientSocket = новый сокет («localhost», порт); Каков предел дескриптора файла и как его настроить? – java2485

ответ

1

Есть 2 вещи, которые вы должны обязательно проверить.

Предел дескриптора файла. В системе на базе Linux вы можете проверить это с помощью ulimit.

Во-вторых, серверы имеют размер очереди ожидания, если у вас больше ожидающих соединений, чем размер очереди, им будет отказано немедленно. Вы должны попробовать конструктор ServerSocket (порт, backlog).

+0

В дополнение к этому проверьте свою оперативную память. 5000 потоков, каждый из которых по умолчанию будет использовать 256k (в зависимости от ОС и т. Д. Может быть 512k) для своего стека. Это добавит, вы можете закончиться виртуальной памяти на 32-битной системе. – nos

 Смежные вопросы

  • Нет связанных вопросов^_^