![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| esi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.3.2009 Репутация: нет Всего: нет |
Помогите разобраться с многопоточностью ServerSocket. Создаю serverSocket, для каждого клиента создаю отдельный поток и имитирую задержку ответа в 3 секунды. Запускаю сервер, открываю 3 окна браузера и из каждого одновременно отправляю запрос на сервер. Тем не менее, ответы не приходят одновременно, а последовательно. В чем может быть причина? (вместо sleep пробовал длинный for, результат такой-же) Как можно реализовать такую ситуацию, чтобы запросы действительно обрабатывались параллельно?
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
ваш сервер принимает запросы последовательно (accept() в одном потоке), а обработка запросов (в вашем случае это sleep ) происходит параллельно ( в разных потоках). Если вы установите случайное время (а не 3 сек всем) обработки для каждого запроса, то обнаружите, что ответы на некоторые поздние запросы возвращаются раньше, чем на более ранние. Это и будет подтверждением параллельности обработки.
Это сообщение отредактировал(а) COVD - 28.5.2009, 13:16 |
|||
|
||||
| esi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.3.2009 Репутация: нет Всего: нет |
попробовал установить случайное время для обработки запросов - результат такой-же, с той разницей, что при одновременной отправке 3 запросов в первом случае ответ приходил через 3,6,9 секунд соответственно, при случайном времени обработки - не так равномерно, но суть не меняется, поскольку на сервере сообщения "accepted" и "closed" выводятся строго последовательно независимо от равномерности поступления запроса и порядок прихода ответов не меняется.
Можно ли как-нибудь принимать accept() не последовательно, а параллельно с использованием одного порта? |
|||
|
||||
| esi |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.3.2009 Репутация: нет Всего: нет |
при переделывании на UDP (DatagramSocket) работает без проблем, похоже, проблема именно в TCP. Пробовал создавать несколько потоков и в каждом из них вызывать accept - результат такой-же - запросы обрабатываются все равно последовательно.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |