Объясните, что такое сервер?
Да, довольно провокационный вопрос. Ведь есть разработчики сервера, есть серверные приложения, есть курсы по серверной разработке. А сам предмет разработки это что?
Понятие слишком обширное и интуитивно понятное всем, кто с ним сталкивался. И всё-таки, если попробовать дать определение серверу, то должно получиться что-то такое:
«Сервер – это система программ, которая отвечает на запросы».
То есть, нет сервера без запросов и ответов. Клиенты посылают серверу запросы, сервер что-то в себе читает, вычисляет или меняет и возвращает клиентам ответы.
Может ли сервер посылать запросы клиенту? В общем случае, может. Нотификация пользователя о событиях на сервере неотъемлемая часть, например, любого игрового сервера. Пользователь должен своевременно узнать о том, что ему в голову пришло… копье противника. И отрисовать красиво это событие. Сервер должен сам уведомить клиента о событии, не дожидаясь запроса от клиента.
Теперь рассмотрим веб-сервер: что это такое?
Очевидно это сервер, определение которому мы уже дали выше. Но что значит приставка «веб»? К счастью для нас, это понятие уже не такое абстрактное, как сервер, и у него есть определение на Wikipedia.
«Веб-сервер – сервер, который обрабатывает запросы по протоколу HTTP».
Ответы, очевидно, тоже отправляет по этому же протоколу. Если вы пишите клиент-серверное приложение, в котором клиент это браузер, а сервер это… веб-сервер. То протокол общения между ними определён.
Может ли веб-сервер уведомить клиента о событии? Нет. Протокол не позволяет это сделать. Веб-сервер может только отвечать на запросы. Нет запросов, нет ответов.
Как же быть разработчику браузерных игр? Без уведомления клиента динамические игры невозможны. Обмануть протокол? Да, это можно сделать. Можно продолжать использовать HTTP, но «подписать» клиент на события на сервере. Названия подходов и технологий здесь: ajax, long polling или websockets. WebSockets, правда, уже не HTTP, но это предмет уже следующей заметки.
Есть вопрос? Напишите в комментариях!