You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 5-network/12-server-sent-events/article.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,32 +1,32 @@
1
1
# Server Sent Events
2
2
3
-
La specifica [Server-Sent Events](https://html.spec.whatwg.org/multipage/comms.html#the-eventsource-interface) descrive una classe built-in `EventSource`, che mantiene la connesione con il server e permette di ricevere eventi da esso.
3
+
La specifica [Server-Sent Events](https://html.spec.whatwg.org/multipage/comms.html#the-eventsource-interface) descrive una classe built-in `EventSource`, che mantiene la connessione con il server e permette di ricevere eventi da esso.
4
4
5
5
In modo simile ai `WebSocket`, la connessione è persistente.
6
6
7
7
Ci sono però delle differenze sostanziali:
8
8
9
9
|`WebSocket`|`EventSource`|
10
10
|-------------|---------------|
11
-
|Bi-directional: both client and server can exchange messages|One-directional: only server sends data|
12
-
|Binary and text data|Only text|
13
-
| WebSocket protocol | Regular HTTP |
11
+
|Bidirezionale: sia il client che il server possono scambiare messaggi|Unidirezionale: solamente il server può inviare messaggi|
12
+
|Dati binari e testuali|Solo testuali|
13
+
|Protocollo WebSocket |HTTP standard|
14
14
15
15
`EventSource`è un modo meno potente di comunicare con il server rispetto ai `WebSocket`.
16
16
17
17
Perchè dovremmo usarli?
18
18
19
19
La ragione principale: è semplice da usare. In molte applicazioni, la potenza dei `WebSocket`è anche troppa.
20
20
21
-
Abbiamo necessità di rivcevere un data stream da un server: forse messaggi di chat o prezzi dei mercati. Quustoè ciò per cui `EventSource`è fatto. Supporta anche l'uto riconessione, qualcosa che dobbiamo invece implementare manualmente nei `WebSocket`. Oltretutto, è un normalissimo HTTP, e non un nuovo protocollo.
21
+
Se abbiamo necessità di ricevere un flusso di dati da un server: che siano messaggi di chat o variazioni di prezzo dei mercati. Alloraè ciò per cui `EventSource`è fatto. Supporta anche l'auto riconessione, la qualcosa dovremmo invece implementare manualmente nei `WebSocket`. Oltretutto, è un normalissimo HTTP, e non un nuovo protocollo.
22
22
23
23
## Ottenere i messaggi
24
24
25
25
Per cominciare a ricevere messaggi, dobbiamo solamente creare un `new EventSource(url)`.
26
26
27
27
Il browser si connetterà all'url e terrà la connessione aperta, in attesa di eventi.
28
28
29
-
Il server dovrebbe rispondere con status 200 e l'header `Content-Type: text/event-stream`, quindi, tenere aperta la connessione e scrivere i messaggi all'interno di esso in un formato speciale come questo:
29
+
Il server dovrebbe rispondere con status 200 ed header `Content-Type: text/event-stream`, dopodichè mantenere aperta la connessione e scrivere i messaggi all'interno di esso in un formato speciale del tipo:
30
30
31
31
```
32
32
data: Message 1
@@ -39,7 +39,7 @@ data: of two lines
39
39
40
40
- Un messaggio di testo che va dopo `data:`, lo spazio dopo la virgola è opzionale.
41
41
- I messaggi sono delimitati con un doppio line break `\n\n`.
42
-
- Per inviare un line break `\n`, possiamo inviare immediatamente un altro `data:` (il terzo messaggio poco più sopra).
42
+
- Per inviare un line break `\n`, possiamo inviare immediatamente un altro `data:` (il terzo messaggio nell'esempio qui sopra).
43
43
44
44
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
45
45
@@ -90,7 +90,7 @@ In fase di creazione, `new EventSource` si connette al server, e se la connessio
90
90
91
91
Ciòè molto conveniente, dal momento che non ci dobbiamo curare della cosa.
92
92
93
-
C'è un piccolo ritardo tra le riconessioni, pochi secondi di default.
93
+
C'è un piccolo ritardo tra le riconnessioni, pochi secondi di default.
94
94
95
95
Il server può impostare il ritardo raccomandato usando `retry:` nella risposta (in millisecondi)
96
96
@@ -137,21 +137,21 @@ Quando viene ricevuto un messaggio con `id:`, il browser:
137
137
- Imposta la proprietà`eventSource.lastEventId` su quel valore.
138
138
- In fase di riconnessione invia l'header `Last-Event-ID` con quell'`id`, in modo da permettere al server di reinviare i messaggi successivi.
139
139
140
-
```smart header="Put`id:`after`data:`"
141
-
Nota bene: l'`id` viene aggiunto sotto il messaggio `data` dal server, per assicurarsi che `lastEventId` venga aggiornato solamente dopo che il messaggio sia stato ricevuto.
140
+
```smart header="Inserisci`id:`dopo`data:`"
141
+
Nota bene: l'`id` viene aggiunto dopo il messaggio `data` dal server, per assicurarsi che `lastEventId` venga aggiornato solamente dopo che il messaggio sia stato ricevuto.
142
142
```
143
143
144
144
## Stato della conessione: readyState
145
145
146
146
L'oggetto `EventSource` possiede la proprietà `readyState`, che assume uno tra questi tre valori:
147
147
148
148
```js no-beautify
149
-
EventSource.CONNECTING = 0; // cnnessione o riconnessione
149
+
EventSource.CONNECTING = 0; // connessione o riconnessione
150
150
EventSource.OPEN = 1; // connesso
151
151
EventSource.CLOSED = 2; // connessione chiusa
152
152
```
153
153
154
-
Quando viene creato un oggetto, o la connessione è assente, èsempre `EventSource.CONNECTING` (equivale a `0`).
154
+
Quando viene creato un oggetto, o se la connessione è assente, viene valorizzato sempre a`EventSource.CONNECTING` (equivale a `0`).
155
155
156
156
Possiamo interrogare questa proprietà per sapere lo stato di `EventSource`.
157
157
@@ -222,7 +222,7 @@ La sintassi è:
222
222
let source =newEventSource(url, [credentials]);
223
223
```
224
224
225
-
Il secondo argomento ha solo una opzione possibile: `{ withCredentials: true }`, il quale permette di inviare credenziali cross-origin.
225
+
Il secondo argomento consta di una sola opzione possibile: `{ withCredentials: true }`, la quale permette di inviare credenziali cross-origin.
226
226
227
227
Complessivamente la sicurezza del cross-origin è la stessa di `fetch` e altri metodi di rete.
228
228
@@ -248,7 +248,7 @@ Complessivamente la sicurezza del cross-origin è la stessa di `fetch` e a
248
248
: La connessione è stabilita.
249
249
250
250
`error`
251
-
: In caseo di error, inclusi sia la connessione persa (si riconnetterà automaticamente), e errori fatali. Possiamo controllare `readyState` per vedere se è stata tentata la riconnessione.
251
+
: 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.
252
252
253
253
Il server può impostare un evento custom dentro `event:`. Questi eventi andrebbero gestiti usando `addEventListener`, e non `on<event>`.
0 commit comments