Server Sent Events wordt als geheel document opgehaald

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Op een website gebruik ik Server Sent Events om data te streamen naar de client. Hierbij werden problemen ervaren bij sommige gebruikers, waarna ik de situatie heb geisoleerd tot de basis van het probleem.

Ik heb deze request: http://www.betch.nl/stream-test.sse

Deze request geeft als response een text/event-stream mee en wordt beluisterd door een HTML5 JS EventSource object. Dit gaat op de meeste systemen prima.

Het probleem is echter dat op sommige systemen de request in z'n geheel wordt opgehaald voordat het wordt ingelezen. In het bovenstaande voorbeeld wordt initieel 2048+ bytes aan data verzonden, waarna ik 2 minuten lang iedere seconde de tijd "push".

In een gezonde situatie zie je dus eerst een blok padding, daarna 2 minuten de tijd en tot slot "done".

Nou zijn er sommige browsers die de response in z'n geheel ophalen voordat ze ook maar iets tonen. Dit probleem speelt zich ook voor i.c.m. de EventSource, waarbij pas wanneer de 2 minuten voorbij zijn, de gehele event-stream in 1x binnenkomt (te testen via http://www.betch.nl/autoverzekering en dan een vergelijking maken)

De huidige HTTP verkeer is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
GET /stream-test.sse HTTP/1.1
Host: betch.nl

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Fri, 11 Jul 2014 16:25:29 GMT
Content-Type: text/event-stream
Connection: close
Access-Control-Allow-Origin: *

...padding-data...

data: 2014-07-11 18:25:32 +0200

data: 2014-07-11 18:25:33 +0200

data: 2014-07-11 18:25:34 +0200

data: 2014-07-11 18:25:35 +0200

data: 2014-07-11 18:25:36 +0200

data: 2014-07-11 18:25:37 +0200

data: 2014-07-11 18:25:38 +0200

data: 2014-07-11 18:25:39 +0200

data: 2014-07-11 18:25:40 +0200

data: 2014-07-11 18:25:41 +0200

data: 2014-07-11 18:25:42 +0200

data: 2014-07-11 18:25:44 +0200

...enz


Nou heb ik meerdere vermoedens gehad en allemaal "ontkracht":
- Ik heb geprobeerd met en zonder charset=utf-8 (nu zonder)
- Ik heb geprobeerd met en zonder chunked encoding (nu zonder)
- Ik heb geprobeerd met en zonder 2048 bytes aan padding (nu met)
- Ik heb gekeken of er een wazig anti-virus systeem aanwezig is op de probleem-machine (is er niet)
- Het probleem speelt in zowel Firefox als Chrome op het geteste systeem, maar op mijn systeem werkt het prima in Safari, Chrome en Firefox
- Het probleem speelt zich niet af op sommige andere systemen op hetzelfde netwerk (er zit geen rare proxy/wifi tussen o.i.d. die zich ermee bemoeit)
- De response komt wel als stream binnen wanneer ik de HTTP call uitvoer via telnet op de probleem-machine

Het probleem speelt op diverse PC's en browsers, maar ik zie geen verband tussen de systemen waar het wel en niet op speelt.

Wie heeft er nog tips? Ik weet niet echt meer wat te proberen zonder het hele Server Sent Events systeem te vervangen door AJAX polling, en daar sta ik niet op te wachten. Ik zit echter wel met zeurende bezoekers en klanten en een niet goed werkende website.

[ Voor 4% gewijzigd door Gamebuster op 11-07-2014 18:44 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Voor welke browsersversies / os-versies werkt het niet?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Windows 7, Chrome (laatste versie) + Firefox (laatste versie) werken niet, maar op mijn systeem werken ze beiden wel.

[ Voor 23% gewijzigd door Gamebuster op 11-07-2014 19:04 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Is er een speciale reden dat jouw EventSource instance geen onmessage handler heeft?

Edit: ik begrijp trouwens niet waarom je niet een gewoon ajax request doet en het hele antwoord afwacht.

[ Voor 40% gewijzigd door Juup op 11-07-2014 19:23 ]

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • xh3adshotx
  • Registratie: Oktober 2011
  • Laatst online: 28-02-2023
Zou je de test code hier eens kunnen posten? (Chrome 35.0.1916.153 op OS X 10.9 werkt ook niet, Safari wel)

[ Voor 7% gewijzigd door xh3adshotx op 11-07-2014 19:26 ]


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Hier werkt het prima op Chrome 35.0.1916.153 voor OSX 10.9.4

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
http://betch.nl/autoverzekering, en dan een vergelijking aanmaken. Als je bij resultatenpagina spinnertjes ziet e.d. werkt het goed, als-ie leeg blijft en na enkele minuten verschijnt werkt het niet goed :P

De javascript doet het echter prima; het bovenstaande voorbeeld (in 1e post) wordt bij de probleem-systemen al in zn geheel opgehaald ipv streamend

[ Voor 26% gewijzigd door Gamebuster op 11-07-2014 20:02 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • xh3adshotx
  • Registratie: Oktober 2011
  • Laatst online: 28-02-2023
Gamebuster schreef op vrijdag 11 juli 2014 @ 20:02:
http://betch.nl/autoverzekering, en dan een vergelijking aanmaken. Als je bij resultatenpagina spinnertjes ziet e.d. werkt het goed, als-ie leeg blijft en na enkele minuten verschijnt werkt het niet goed :P

De javascript doet het echter prima; het bovenstaande voorbeeld (in 1e post) wordt bij de probleem-systemen al in zn geheel opgehaald ipv streamend
Stuur je aan de server kant wel "\n\n" mee met iedere push?

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
http://server-sent-events-demo.herokuapp.com < Deze demo werkt ook niet bij de Chrome van de "probleem-PC"... Lijkt erop dat ik server sent events eruit mag slopen en het niet aan mij ligt.
xh3adshotx schreef op vrijdag 11 juli 2014 @ 20:13:
[...]
Stuur je aan de server kant wel "\n\n" mee met iedere push?
Ik heb een voorbeeld link hier: http://www.betch.nl/stream-test.sse (en in de 1e post) en de HTTP request/response in de 1e post. In beide kan je zien dat ik \n\n meestuur na ieder event.

[ Voor 20% gewijzigd door Gamebuster op 11-07-2014 20:34 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
En je flusht de output buffer ook steeds?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Juup schreef op vrijdag 11 juli 2014 @ 22:38:
En je flusht de output buffer ook steeds?
Yes, anders zou het ook niet werken via telnet en diverse andere machines/clients. Overigens staat output buffering uit.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Nog wat test-info voor Chrome 35.0.1916.153 op OS X 10.9.4
de heroku demo werkt wel
jouw test pagina werkt niet

FWIW: Firefox 30.0 laat de pagina niet eens zien, maar geeft me een prompt om de sse file op te slaan..

Acties:
  • 0 Henk 'm!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 21:22

Tribits

Onkruid vergaat niet

TheRookie schreef op zondag 13 juli 2014 @ 08:43:
Nog wat test-info voor Chrome 35.0.1916.153 op OS X 10.9.4
de heroku demo werkt wel
jouw test pagina werkt niet

FWIW: Firefox 30.0 laat de pagina niet eens zien, maar geeft me een prompt om de sse file op te slaan..
Ik neem aan dat je die link naar de sse in je browser plakt maar dat werkt dus niet omdat het slechts de events zijn. Als ik even de testcode van herokuapp.com pak en daar de link naar de sse op de betch server plak dan werkt het wel, voorop genomen dat je browser CORS (cross origin resource sharing) toestaat (Safari doet dat niet).

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!doctype html>
<meta charset="utf-8">
<title>EventSource demo</title>
<h1>new EventSource()</h1>
<p><output id="result">OUTPUT VALUE</output></p>
<script>
(function(global, window, document) {
  'use strict';

  function main() {
    window.addEventListener('DOMContentLoaded', contentLoaded);
  }

  function contentLoaded() {
    var result = document.getElementById('result');
    var stream = new EventSource('http://www.betch.nl/stream-test.sse');
    stream.addEventListener('message', function(event) {
      var data = event.data;
      result.value = data;
    });
  }

  main();
})(this, window, window.document);
</script>


Met deze testpagina werkt het bij mij zowel onder Win7 als Ubuntu 12 met Chrome 35 en Firefox 30 correct.

Je geeft in je OP aan dat er geen proxy of iets dergelijks in de weg zit maar ik krijg toch het idee dat er lokaal iets draait dat zich gedraagt als proxy, bijvoorbeeld een virus scanner of web filter. Blijft op zich wel vreemd dat opvragen met telnet geen probleem geeft. Laat de netwerk console van firebug of chrome nog iets bijzonders zien? Als ik die hier open zie ik een enkele get/connectie die duidelijk iedere seconde nieuwe data krijgt.

Master of questionable victories and sheer glorious defeats


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Sophos Webprotection was de boosdoener.

Zie ook: http://stackoverflow.com/...sse-not-firing-in-browser

HTTPS werkt als oplossing.

[ Voor 66% gewijzigd door Gamebuster op 15-07-2014 11:42 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden

Pagina: 1