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:
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.
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