История изменений
Исправление Stanson, (текущая версия) :
А как-же реконнект? Особенно, если сообщения по несколько байт? Аналоговый датчик, например
function sensor_poll()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if( this.readyState !== 4 ) return;
if( this.status !== 200 ) return;
var obj = JSON.parse( this.responseText );
document.getElementById("temp").textContent = obj.temp;
sensor_poll();
}
xhr.open( 'GET', 'your-sensor-hostname.lan:14088/data', true );
xhr.setRequestHeader('Connection', 'keep-alive'); // Это для браузера, на самом деле.
xhr.send();
}
Ну и все твои XMLHttpRequest'ы будут отправляться по уже открытому соединению. Для твоего сервера это будет выглядеть как
Открыто соединение с клиента
> GET /data HTTP/1.1
> Host: your-sensor-hostname.lan
> Connection: keep-alive
>
Прошло X времени
< HTTP/1.1 200 OK
< Content-Length: 15
< Content-Type: application/json
<
< {"temp":"22.0"}
Твой XMLHttpRequest получает данные, зовёт onreadystatechange,
где данные куда-нибудь показываются и запускается новый
XMLHttpRequest, сразу, по тому же соединению
> GET /data HTTP/1.1
> Host: your-sensor-hostname.lan
> Connection: keep-alive
>
Когда данные готовы, опять
< HTTP/1.1 200 OK
< Content-Length: 15
< Content-Type: application/json
<
< {"temp":"22.0"}
И так до бесконечности
Чем это вообще отличается от вебсокета? Заголовками?
Исходная версия Stanson, :
А как-же реконнект? Особенно, если сообщения по несколько байт? Аналоговый датчик, например
function sensor_poll()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if( this.readyState !== 4 ) return;
if( this.status !== 200 ) return;
var obj = JSON.parse( this.responseText );
document.getElementById("temp").textContent = obj.temp;
sensor_poll();
}
xhr.open( 'GET', 'your-sensor-hostname.lan:14088/data', true );
xhr.setRequestHeader('Connection', 'keep-alive');
xhr.send();
}
Ну и все твои XMLHttpRequest'ы будут отправляться по уже открытому соединению. Для твоего сервера это будет выглядеть как
Открыто соединение с клиента
> GET /data HTTP/1.1
> Host: your-sensor-hostname.lan
> Connection: keep-alive
>
Прошло X времени
< HTTP/1.1 200 OK
< Content-Length: 15
< Content-Type: application/json
<
< {"temp":"22.0"}
Твой XMLHttpRequest получает данные, зовёт onreadystatechange,
где данные куда-нибудь показываются и запускается новый
XMLHttpRequest, сразу, по тому же соединению
> GET /data HTTP/1.1
> Host: your-sensor-hostname.lan
> Connection: keep-alive
>
Когда данные готовы, опять
< HTTP/1.1 200 OK
< Content-Length: 15
< Content-Type: application/json
<
< {"temp":"22.0"}
И так до бесконечности
Чем это вообще отличается от вебсокета? Заголовками?