я пытаюсь написать простой веб-сервер в Java.
сейчас у меня есть только простая программа, но я хотел бы расширить ее, чтобы она могла обслуживать несколько браузеров, устанавливая несколько соединений tcp.
Я читал о многопоточности.Насколько я понимаю, вы можете создать новый поток, и это будет продолжаться, как если бы это была другая программа целиком.поэтому с новым потоком может сложиться впечатление, что есть 2 веб-сервера, которые могут обслуживать 2 веб-браузера, или x веб-серверов, которые могут обслуживать x веб-браузеров.
Я немного потерял в том, как создавать новые потоки в Javaхотя и чтобы дать каждому новому потоку соединение.
я думаю, что у меня был бы такой цикл, который бы получал новые соединения и передавал каждое новое соединение в новый поток
// make new ServerSocket
while (true) {
Socket newConn = serverSocket.accept();
// make new thread, and pass in newConn
}
canкто-нибудь дать мне несколько советов о том, как двигаться вперед?(также, если я где-то допустил ошибку, пожалуйста, укажите на это. Я новичок в многопоточном программировании, поэтому вполне возможно, что я его неправильно понял)
rob
edit:
k спасибо всем.
я пошел и написал кое-что, этот учебник по Java очень помог.
у меня появилась новая проблема
я добавил цикл в свой прогон () метод в новом потоке, который содержит 10-секундный обратный отсчет (используя Thread.sleep (1000)) всякий раз, когда сервер получает запрос на изображение, поэтому я могу видеть, когда какие потоки работают.(index.html имеет 4 изображения)
, поэтому я запросил страницу index.html и мой сервер работает нормально.Затем я открыл около десятка новых вкладок.Я ожидал, что запрос на страницу index.html будет мгновенным, но для отправки изображений в браузер потребуется 10 секунд (из-за той задержки, которую я вставил туда), после чего сервер получит запросдля следующей страницы index.html и так далее.В общем, я подумал, что дюжина страниц index.html будет обслуживаться мгновенно, в то время как 4 * 12 = 36 изображений будут отображаться на всех вкладках. Это займет 10 секунд.
что на самом деле произошло, это заняло 10 секундчтобы получить первые 4 изображения, затем 10 секунд для следующих 4 изображений и т. д., вместо того, чтобы обслуживать несколько веб-страниц, мой сервер просто ставит в очередь запросы и обрабатывает по одной странице за раз.
Я думаю, что мойПрограмма виновата.но я чувствую, что не могу правильно понять, как браузер взаимодействует с сервером.я думал, что браузер запрашивает новые объекты при разборе html-страницы.так что мой сервер должен получать десятки запросов, если я открою дюжину страниц.я попытался открыть несколько вкладок в FF, а затем несколько окон в FF, но это не помогло.
ОДНАКО, когда я открывал IE, FF и Chrome и запрашивал index.html в разное время (с интервалом около 2 секунд), казалось, что каждый браузер одновременно получает страницу, другими словами,в один момент было подано 12 разных изображений, по 4 на каждый браузер
, так что я думаю, что я ищу подтверждение того, что это ожидаемое поведение?и если да, то почему я мог видеть это поведение только тогда, когда открыл 3 разных браузера, а не когда открыл несколько вкладок?
(для тех, кто спрашивал, я планирую нормально пройти курс по сети, следующийгод, но я сейчас пытаюсь сделать что-то из базовых вещей, так что половина самообучения, половина ч / б)