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/11-websocket/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
@@ -73,7 +73,7 @@ Adesso approfondiamo un po'.
73
73
74
74
Non appena viene istanziato `new WebSocket(url)`, il websocket tenta immediatamente di stabilire una connessione.
75
75
76
-
Dureante la connessione, il browser (utilizzando degli headers appositi) chiede al server: "Supporti i WebSocket?" e se il server risponde "Si", allora la conversazione continua con il protocollo WebSocket, che non è per nulla HTTP.
76
+
Durante la connessione, il browser (utilizzando degli headers appositi) chiede al server: "Supporti i WebSocket?" e se il server risponde "Si", allora la conversazione continua con il protocollo WebSocket, che non è per nulla HTTP.
77
77
78
78

79
79
@@ -97,7 +97,7 @@ Sec-WebSocket-Version: 13
97
97
-`Sec-WebSocket-Version` -- versione di protocollo del WebSocket, 13 è quella corrente.
98
98
99
99
```smart header="L'handsnake del WebSocket non può essere emulato."
100
-
Non è possibile utilizzare `XMLHttpRequest` oppure `fetch` per fare questo tipo di richieste HTTP, dal momento che a JavaScript non è peremessa la creazione di questi headers.
100
+
Non è possibile utilizzare `XMLHttpRequest` oppure `fetch` per fare questo tipo di richieste HTTP, dal momento che a JavaScript non è premessa la creazione di questi headers.
101
101
```
102
102
Se il server acconsente allo switch in WebSocket, dovrebbe rispondere con un codice 101:
Qui `Sec-WebSocket-Accept`è`Sec-WebSocket-Key` ricodificato usando un algoritmo speciale. Il browser lo usa per assicurarsi che la risposta sia corrispondente alla richiesta.
112
112
113
-
In seguito, i dati vengono trasferiti usando il protocollo WebSocket, presto ne vedremo vedremo la struttura ("frames"). E questo non ha niente a che vedere con HTTP.
113
+
In seguito, i dati vengono trasferiti usando il protocollo WebSocket, presto ne vedremo la struttura ("frames"). E questo non ha niente a che vedere con HTTP.
114
114
115
115
### Estensioni e subprotocolli
116
116
117
-
Ci possono essere gli headers aggiuntivi `Sec-WebSocket-Extensions` e `Sec-WebSocket-Protocol` i quali descrivo etensioni e subprotocolli.
117
+
Ci possono essere gli headers aggiuntivi `Sec-WebSocket-Extensions` e `Sec-WebSocket-Protocol` i quali descrivo estensioni e subprotocolli.
118
118
119
119
Ad esempio:
120
120
@@ -179,7 +179,7 @@ Una chiamata `socket.send(body)` permette che il `body` possa essere sia in form
179
179
180
180
Questo è settato dalla proprietà `socket.bufferType`, di default è `"blob"`, così i dati binari arrivano come oggetti `Blob`.
181
181
182
-
[Blob](info:blob) è un oggetto bianrio di alto livello, si integra direttamente con `<a>`, `<img>` e altri tag, così è un default puro. Ma per processamenti binari, per accedere ai singoli data bytes, possiamo cambiarlo in`"arraybuffer"`:
182
+
[Blob](info:blob) è un oggetto binario di alto livello, si integra direttamente con `<a>`, `<img>` e altri tag, così è un default puro. Ma per operazioni binarie, per accedere ai singoli data bytes, possiamo cambiarlo in`"arraybuffer"`:
Immagina che la nostra app abbia tantissimi dati da inviare. Ma che l'utente abbia una connessione molto lenta, magari internet su rete mobile e fuori città.
195
-
Potremmo chiamare `socket.send(data)` in continuazione. Però i dati verrano bufferizzati (immagazzinati) in memoria ed invaiti solo quando una connessione abbastanza veloce lo permetterà.
195
+
Potremmo chiamare `socket.send(data)` in continuazione. Però i dati verranno bufferizzati (immagazzinati) in memoria ed inviati solo quando una connessione abbastanza veloce lo permetterà.
196
196
197
197
La proprietà `socket.bufferedAmount` immagazzina i dati che sono bufferizzati in un dato momento, in attesa di inviarli tramite la rete.
198
198
@@ -211,15 +211,15 @@ setInterval(() => {
211
211
212
212
## Chiusura della connessione
213
213
214
-
Normalmente, quando una delle parti desidera chiudere una connessione (sia il borwser che il server hanno ognuno gli stessi diritti), inviano un "connection close frame", un frame di chiusura connessione con un codice numerico e una descrizione testuale della motivazione.
214
+
Normalmente, quando una delle parti desidera chiudere una connessione (sia il browser che il server hanno ognuno gli stessi diritti), inviano un "connection close frame", un frame di chiusura connessione con un codice numerico e una descrizione testuale della motivazione.
215
215
216
216
Il metodo per farlo è:
217
217
```js
218
218
socket.close([code], [reason]);
219
219
```
220
220
221
221
- `code` è un codice specifico del WebSocket (opzionale)
222
-
- `reason` è una stringa che descrive la motivazione della chiusrua (opzionale)
222
+
- `reason` è una stringa che descrive la motivazione della chiusura (opzionale)
223
223
224
224
Le altre parti ottengono il codice e la motivazione all'interno dell'handler `close`, ad esempio:
225
225
@@ -241,7 +241,7 @@ I valori più comuni sono:
241
241
242
242
Esistono altri codice come:
243
243
244
-
-`1001` -- la parte non risulta raggiungbile, ad esempio, il server si sta spegnendo o il browser ha chiuso la pagina,
244
+
-`1001` -- la parte non risulta raggiungibile, ad esempio, il server si sta spegnendo o il browser ha chiuso la pagina,
245
245
-`1009` -- il messaggio è troppo grande per essere processato,
246
246
-`1011` -- errore non previsto nel server,
247
247
- ...e così via.
@@ -288,7 +288,7 @@ HTML: abbiamo bisogno di un tag `<form>` per inviare i messaggi e di un tag `<di
288
288
```
289
289
290
290
Da JavaScript vogliamo tre cose:
291
-
1. Aprire la connesione.
291
+
1. Aprire la connessione.
292
292
2. Gestire il form con l'invio -- `socket.send(message)` per il messaggio.
293
293
3. Gestire il messaggio in arrivo -- accodarlo all'elemento `div#messages`.
294
294
@@ -330,7 +330,7 @@ const clients = new Set();
330
330
331
331
http.createServer((req, res) => {
332
332
// qui gestiamo solamente le connessioni websocket
333
-
// in progetti veri dovremmo avere ache fare con altro codice per gestire richeiste che non non-websocket
333
+
// in progetti veri dovremmo avere anche fare con altro codice per gestire richieste che non non-websocket
Puoi anche scaricarlo (pulsante in alto a destra nell'iframe) ed eseguirlo localmente. Solamente non dimenticare di installare [Node.js](https://nodejs.org/en/) e di fare partire `npm install ws` prima di avviarlo.
360
360
361
-
## Conclusioni
361
+
## Riepilogo
362
362
363
363
WebSocket sono una maniera moderna di avere connessioni persistenti browser-server.
364
364
@@ -378,8 +378,8 @@ Eventi:
378
378
-`error`,
379
379
-`close`.
380
380
381
-
I WebSocket di per sè non includono la riconnesione, l'autenticazione e molti altri meccanismi di alto livello. Per quello, ci sono una infinità di librerie, ma è anche possibile implementare queste funzionalità manualmente.
381
+
I WebSocket di per sè non includono la riconnessione, l'autenticazione e molti altri meccanismi di alto livello. Per quello, ci sono una infinità di librerie, ma è anche possibile implementare queste funzionalità manualmente.
382
382
383
-
A volte, per integrare i WebSocket in progetti già esistenti,la gente esegue un WebSocket server in parallelo con il server HTTP principale, e condividono un unico database. Le richieste ai WebSocket usano `wss://ws.site.com`, un sottodominio (subdoman) che conduce al server WebSocket, mentre `https://site.com` va al server HTTP principale.
383
+
A volte, per integrare i WebSocket in progetti già esistenti,la gente esegue un WebSocket server in parallelo con il server HTTP principale, e condividono un unico database. Le richieste ai WebSocket usano `wss://ws.site.com`, un sottodominio (subdomain) che conduce al server WebSocket, mentre `https://site.com` va al server HTTP principale.
384
384
385
385
Sicuramente, sono possibili altre modalità di integrazione.
0 commit comments