Netspirit писал(а):
Не очень представляю, почему плохоНа сколько я понимаю TCP количество сокетов в системе тоже органиченно, процессором, оперативной памятью, процессором и буфером сетевой карты и настройками ОС.
Я когда-то тестировал web приложение в одной фирме, все работало как надо, но потом я решил открыть несколько тысяч сокетов - приложение вывалилось, потому что небыло ограничений на кол-во сокетов которое можно открыть с 1 ip адреса)) т.е. получилось некоторое подобие DDOS) хотя по факту сокеты должны были просто перестать открываться)
Это все лирика перейду к сути вопроса:
Допустим есть html страница на которой есть скрипт, css стиль, картинка.
При загрузке страницы браузер в несколько соединений спрашивает у сервера:
1) Саму страницу
2) Скрипт
3) css стиль
4) картинку
5) запрос который выполняет скрипт с страницы (postget не важно)
мини лог 1 соединения (загрузка 1 страницы):
CurClientID;запрос
38776654;page.html
58776655;script.js
38776655;style.css
58776656;image.jpg
58776655;(пост_запрос)
Судя по логу:
58776655;script.js
58776655;style.css
58776655;(пост_запрос)
клиент с ID 58776655 делает 3 запроса последовательно.
Вопросы:
1)
Для того чтобы что-то ответить клиенту (браузеру в моем случае) мне необходимо указать ClientID, перед отправкой данных...как выбрать "нужный" ClientID?
Запрашивается 2 файла и 1 ответ на запрос скрипта, все запросы с соединений с одинаковым ID...просто отвечать ему в том же порядке в котором он спрашивает?
т.е. отправляю клиенту c ID 58776655 сначала script.js, затем этому же ID style.css и т.д.?
А он (браузер) уже дальше сам разберется с полученными данными?
п.с. Проверял через doEnumClients - там тоже 3 одинаковых клиента числятся.
2) Как закрыть конкретное соединение в этом случае?
Например соединение в котором я отдал скрипт - не закрылось автоматически (браузеры тоже иногда Connection: close "мимо ушей" пропускают), как его закрывать...
если закрою по ID 58776655 - могу передачу других файловданных прервать..
3) Правильно ли схему следующим образом: На каждый запрос клиента - отдельный экземпляр схемы (в данный момент использую именно этот вариант)?
4) Можно ли настроить альтернативный сервер таким образом чтобы каждое подключение имело уникальный CurClientID?
Это бы очень упростило работу с WEB приложениями...при использовании TCP клиента стандартногоальтернативного - все CurClientID с 1 ip адреса разные как и положено...а при использовании в качестве клиента браузера попадаются одинаковые.
Я не берусь утверждать ни в коем случае, но может это баг?
п.с. причем данные которые поступают с одинаковым CurClientID не в одном соединении происходят последовательно...а в разных т.к. при запросе 1 страницы количество активных соединений = количеству запрашиваемых файлов.