| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > ServerSocket+многопоточность |
| Автор: esi 28.5.2009, 12:04 | ||
Помогите разобраться с многопоточностью ServerSocket. Создаю serverSocket, для каждого клиента создаю отдельный поток и имитирую задержку ответа в 3 секунды. Запускаю сервер, открываю 3 окна браузера и из каждого одновременно отправляю запрос на сервер. Тем не менее, ответы не приходят одновременно, а последовательно. В чем может быть причина? (вместо sleep пробовал длинный for, результат такой-же) Как можно реализовать такую ситуацию, чтобы запросы действительно обрабатывались параллельно?
|
| Автор: COVD 28.5.2009, 13:11 |
| ваш сервер принимает запросы последовательно (accept() в одном потоке), а обработка запросов (в вашем случае это sleep ) происходит параллельно ( в разных потоках). Если вы установите случайное время (а не 3 сек всем) обработки для каждого запроса, то обнаружите, что ответы на некоторые поздние запросы возвращаются раньше, чем на более ранние. Это и будет подтверждением параллельности обработки. |
| Автор: esi 28.5.2009, 14:00 |
| попробовал установить случайное время для обработки запросов - результат такой-же, с той разницей, что при одновременной отправке 3 запросов в первом случае ответ приходил через 3,6,9 секунд соответственно, при случайном времени обработки - не так равномерно, но суть не меняется, поскольку на сервере сообщения "accepted" и "closed" выводятся строго последовательно независимо от равномерности поступления запроса и порядок прихода ответов не меняется. Можно ли как-нибудь принимать accept() не последовательно, а параллельно с использованием одного порта? |
| Автор: esi 28.5.2009, 17:34 |
| при переделывании на UDP (DatagramSocket) работает без проблем, похоже, проблема именно в TCP. Пробовал создавать несколько потоков и в каждом из них вызывать accept - результат такой-же - запросы обрабатываются все равно последовательно. |