Зададимся сегодня провокационным вопросом: что такое сервер? Есть разработчики сервера, есть серверные приложения, есть курсы по серверной разработке. А сам предмет разработки это что? Понятие слишком обширное и интуитивно понятное всем кто с ним сталкивался.



И всетаки, если попробовать дать определение серверу, то должно получиться что-то такое: сервер - это система программ, которая отвечает на запросы. То есть, нет сервера без запросов и ответов. Клиенты посылают серверу запросы, сервер что-то в себе читает, вычисляет или меняет и возвращает клиентам ответы.



Может ли сервер посылать запросы клиенту? В общем случае, может. Нотификация пользователя о событиях на сервере неотъемлемая часть, например, любого игрового сервера. Пользователь должен своевременно узнать о том, что ему в голову пришло… копье противника. И отрисовать красиво это событие. Сервер должен сам уведомить клиента о событии, не дожидаясь запроса от клиента.



Теперь рассмотрим веб сервер. Что это такое? Очевидно это сервер, в определении которое мы уже дали выше. Но что значит приставка “веб”?



К счастью для нас, это понятие уже не такое абстрактное как сервер и у него есть определение на wikipedia. Веб сервер, это сервер который обрабатывает запросы по протоколу HTTP. Ответы, очевидно, тоже отправляет по этому же протоколу.



Если вы пишите клиент-серверное приложение в котором клиент это браузер, а сервер это… веб сервер. То протокол общения между ними определен. Может ли веб сервер уведомить клиента о событии? Нет. Протокол не позволяет это сделать. Веб сервер может только отвечать на запросы. Нет запросов, нет ответов.



Как же быть разработчику браузерных игр? Без уведомления клиента динамические игры невозможны. Обмануть протокол? Да, это можно сделать. Можно продолжать использовать HTTP, но “подписать” клиент на события на сервере. Названия подходов и технологий здесь: ajax, long polling или websockets. WebSockets, правда, уже не HTTP, но это предмет уже следующей заметки.