Каким образом осуществляется взаимодействие веб-сервера (сайта) и клиента?

Приветствую.

В веб-технологиях я новичек, поэтому у меня есть несколько вопросов, которые я хотел бы прояснить. Я разбил один большой вопрос на несколько вопросов. В некоторых вопросах я предполагаю, что "это" работает имеено так, и если я не прав, прошу поправить меня.

Итак, меня интересует взаимодейтсвие веб-сервера (например, на котором размещен сайт) и клиента (который открывает этот сайт в своем броузере) на транспортном уровне. Представим, что этот сайт построен на технологии AJAX. То есть, контент подгружается динамически. Как подгруженный контент рендерится на клиенте при помощи JS меня не интересует. Понять я не могу именно транспортировку пакетов.

Вопросы:

1) Что вообще обозначает синхронность/асинхронность в веб-технологиях?

2) Клиент открывает в своем броузере сайт. Что происходит? Создается TCP/IP соединение? Каким образом сервер знает куда отправить пакет в случае, когда появился новый контент (AJAX)? Он сохраняет информацию (не закрывает?) TCP/IP соединение и использует этот транспорт для общения с клиентом?

Если так, то
3) Сохраняется ли это соединение активным пока клиент не закроет вкладку с этим сайтом в своем броузере? А если клиент открыл вкладку с сайтом и на N часов ушел пить чай, то в этом случае все эти N часов сервер должен обслуживать это соединение? Насколько это требовательно к рессурсам? Если клиент открыл N вкладок с N сайтами в своем броузере, означае ли это что открыто N TCP/IP соединений? Какие есть ограничения на количество таких соединений для клиента и для сервера?

4) На каких технологиях реализуют чаты?

Буду благодарен за ответы.
  • Вопрос задан
  • 8108 просмотров
Решения вопроса 1
nekipelov
@nekipelov
1) Что вообще обозначает синхронность/асинхронность в веб-технологиях?


То и означает, что работает синхронного или асинхронно. Более расширенный ответ зависит от контекста (вы имели в виду реализацию http сервера, или же реализацию интерфейса, а может быть другое).

2) Клиент открывает в своем броузере сайт. Что происходит? Создается TCP/IP соединение?


Например открывает сайт www.ru/dir/page.html:

1. Браузер должен определить ip адрес соответствующий домену www.ru,
2. Установить соединение с ip адресом на порт по умолчанию 80.
3. Сформировать и отправить HTTP запрос (GET /dir/page.html).
4. Получить ответ и обработать его.

Если запрос инициирован из JavaScript, ответ передается ему. Если же сам браузер, открывается страничка, если тип ответа html, картинка, если тип ответа картинка, или выполняется javascript код....

Каким образом сервер знает куда отправить пакет в случае, когда появился новый контент (AJAX)? Он сохраняет информацию (не закрывает?) TCP/IP соединение и использует этот транспорт для общения с клиентом?


В классическом http сервер сам по себе ничего не отправляет клиенту, только отвечает на запрос с его стороны. Клиент сам время от времени опрашивает сервер на предмет появления новых данных. Зарывается ли соединение или нет зависит от используемого протокола (HTTP 1.1 по умолчанию поддержэивает соединение) и настроек сервера/клиента (есть таймауты, по истечении которых соединение закрывается).

Есть новомодные технологии, например WebSockets. Все шаги почти такие же, как и для HTTP, но в рамках одного tcp соединения мультиплексируюстя несколько виртуальных соединений. В этом случае WebSockets-сервер может сам инициировать отправку данных клиенут (как и клиент серверу в рамках этого же tcp соединения). Только сервер ничего не узнает, его дело - пересылать байты. Инициирует отправку web приложение, выполняемое на стороне сервера.

Есть хитрые технологии, например открытие бесконечно длинной страницы в отдельном фрейме. Приложение со стороны сервера не сообщает конечную длинную страницы и браузер скачивает ее пока ему не надоест. В этом случае http сервер просто добавляет данные в отдаваемую страницу по мере необходимости. Однако клиент-серверного взаимодействия тут не получится, как в случае WebSockets.

3) Сохраняется ли это соединение активным пока клиент не закроет вкладку с этим сайтом в своем броузере? А если клиент открыл вкладку с сайтом и на N часов ушел пить чай, то в этом случае все эти N часов сервер должен обслуживать это соединение? Насколько это требовательно к рессурсам? Если клиент открыл N вкладок с N сайтами в своем броузере, означае ли это что открыто N TCP/IP соединений? Какие есть ограничения на количество таких соединений для клиента и для сервера?


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

4) На каких технологиях реализуют чаты?


Лучше всего подходят WebSockets и бесконечные фреймы. При этом WebSockets могут быть использованы как в родной реализации для браузера, так и с помощью flash плагина, в случае отсутсвия родной поддержи. Хотя никто не мешает сделать это с помощью опроса (long polling).

Наверное проще всего использовать что-то вроде socket.io, а уж оно само выяснит и решит, каким образом можно взаимодействовать с сервером.

PS: Конечно же это далеко не полная информация, уж слишком серьезная тема затронута.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
pomeo
@pomeo
ajax это в одну строну, т.е. мы с клиента может отправить на сервер что нам надо. websocket'ы в обе, здесь мы уже с сервера в клиент можем отправить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы