Skip to content

Server Sent Events #180

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
24 changes: 12 additions & 12 deletions 5-network/12-server-sent-events/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ data: Message 3
data: of two lines
```

- Un messaggio di testo che va dopo `data:`, lo spazio dopo la virgola è opzionale.
- Un messaggio di testo segue la stringa `data:`, lo spazio dopo la virgola è opzionale.
- I messaggi sono delimitati con un doppio line break `\n\n`.
- Per inviare un line break `\n`, possiamo inviare immediatamente un altro `data:` (il terzo messaggio nell'esempio qui sopra).
- Per inviare un line break `\n`, possiamo inviare immediatamente un altro `data:` (il terzo messaggio nell'esempio precedente).

In pratica, i messaggi complessi sono solitamente inviati tramite oggetti codificati in JSO. I Line-breaks sono codificati come `\n` tra essi, e in questo modo i messaggi `data:` multiriga non sono necessari
In pratica, i messaggi complessi sono solitamente inviati tramite oggetti codificati in JSO. I Line-breaks sono codificati come `\n`, e in questo modo i messaggi `data:` multiriga non sono necessari

Ad esempio:

Expand Down Expand Up @@ -114,7 +114,7 @@ eventSource.close();
Inoltre, non avverrà alcuna riconnessione se la risposta ha un `Content-type` non valido o se il suo HTTP status è diverso da 301, 307, 200 o 204. In questi casi verrà emesso l'evento `"error"`, e il browser non si riconnetterà.

```smart
Quando una connessione è finalemente chiusa, non ci sarà modo di "riaprirla". Se volessimo riconnetterci nuovamente, dovremmo ricreare un nuovo `EventSource`.
Quando una connessione è finalmente chiusa, non ci sarà modo di "riaprirla". Se volessimo riconnetterci nuovamente, dovremmo ricreare un nuovo `EventSource`.
```

## Message id
Expand Down Expand Up @@ -143,7 +143,7 @@ Nota bene: l'`id` viene aggiunto dopo il messaggio `data` dal server, per assicu

## Stato della conessione: readyState

L'oggetto `EventSource` possiede la proprietà `readyState`, che assume uno tra questi tre valori:
L'oggetto `EventSource` possiede la proprietà `readyState`, che può assumere uno dei seguenti valori:

```js no-beautify
EventSource.CONNECTING = 0; // connessione o riconnessione
Expand All @@ -161,7 +161,7 @@ Di base l'oggetto `EventSource` genera tre eventi:

- `message` -- un messaggio ricevuto, disponibile come `event.data`.
- `open` -- la connessione è aperta.
- `error` -- la connessaione non può essere stabilita, ad esempio, il server ha risposto con lo status HTTP 500.
- `error` -- la connessione non può essere stabilita, ad esempio, il server ha risposto con lo status HTTP 500.

Il server può specificare un altro tipo di evento con `event: ...` all'inizio dell'evento.

Expand Down Expand Up @@ -248,19 +248,19 @@ Complessivamente la sicurezza del cross-origin è la stessa di `fetch` e altri m
: La connessione è stabilita.

`error`
: In caso di errori, includendo sia la connessione persa (si riconnetterà automaticamente), che errori fatali. Possiamo controllare `readyState` per vedere se è stata tentata la riconnessione.
: In caso di errori, inclusi sia la connessione persa (con riconnessione automatica) che eventuali errori fatali. Possiamo controllare `readyState` per vedere se è stata tentata la riconnessione.

Il server può impostare un evento custom dentro `event:`. Questi eventi andrebbero gestiti usando `addEventListener`, e non `on<event>`.
Il server può impostare un evento personalizzato dentro `event:`. Questi eventi andrebbero gestiti usando `addEventListener`, e non `on<event>`.

### Formato della risposta del server

Il server invia messaggi, delimitati da `\n\n`.

Un messaggio può avere i seguenti campi:

- `data:` -- corpo del messaggio, una sequenza di `data` multipli viene intrpretata come un messaggio singolo, con `\n` tra la parti.
- `id:` -- aggiorna il `lastEventId`, inviato dentro `Last-Event-ID` in fase di riconnnessione.
- `retry:` -- raccomnda una ritardo nel tentativo di riconessione in millisecondi. Non c'è modo di impostarlo da JavaScript.
- `event:` -- event name, must precede `data:`.
- `data:` -- corpo del messaggio, una sequenza di `data` multipli viene interpretata come un messaggio singolo, con `\n` tra la parti.
- `id:` -- aggiorna `lastEventId`, inviato dentro `Last-Event-ID` in fase di riconnessione.
- `retry:` -- raccomanda una ritardo nel tentativo di riconessione in millisecondi. Non c'è modo di impostarlo da JavaScript.
- `event:` -- il nome dell'evento, deve necessariamente precedere `data:`.

Un messaggio può includere uno o più campi in qualunque ordine, ma l'`id:` solitamente va per ultimo.