Я отвечал на замечание, что http "не держит соединение" - на самом деле все держит:) И удивительно наблюдать, когда гуру с 20-летним стажем спрашиваешь "как работает простой чат" - многих этот простой вопрос ставит в тупик почему то. Все, что делается на WS, может быть реализовано на http.
Вообще что значит держать соединение? Не обязательно http.
Клиент открывает сокет. В linux это файл. Пишет туда данные - это исходящий запрос.
Пишет с помощью системного вызова write().
И читает тоже с помощью системного вызова read().
Когда клиент понимает что пришел ответ который можно прочитать - я хз.
Затем системным вызовом close() закрыается соденинение.
Значит открытое соединение - это просто открытый сокет, в который можно записать что-то, и потом отправить это через tcp/ip.
А закрыть соединение - значит закрыть сокет, и больше не ждать ответа сервера.
Если моя логика верна, то да, http можно держать сколько угодно долго открытым
http://programming-lang.com/ru/comp_programming/metyu/0/j639.html