2012-08-01 13 views
7

Sto cercando di saperne di più su websocket e le sue implementazioni interne. Ma ancora non riesco a capire alcune cose. Ho provato a cercare su Google una spiegazione approfondita, ma la maggior parte di loro fornisce solo una panoramica di alto livello. In seguito sono i miei dubbiImpostazione connessione Websocket

1. Secondo quanto ho letto, server socket web (C#/C++ implementazione) per impostazione predefinita utilizza la porta 80. Anche se siamo in grado di utilizzare qualsiasi porta, è preferibile che usiamo la porta 80 come abbiamo vinto Non ci sono problemi con il firewall. Se è così, come dovremmo eseguire sia il server web che il server socket Web sulla stessa porta (80)?

2. Supponiamo che il server socket Web è in esecuzione sulla porta 81 e server web è in esecuzione sulla porta 80.

  1. Così, quando il browser invia la richiesta iniziale di handshake HTTP (aggiornamento: websocket) , questa richiesta inviata alla porta 81. Giusto? Se è così, questa richiesta (vedi sotto) non ha alcuna relazione con un protocollo HTTP. Ma ancora usiamo le intestazioni del protocollo HTTP. Perché?

     GET /mychat HTTP/1.1 
         Host: server.example.com 
         Upgrade: websocket 
         Connection: Upgrade 
         Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== 
         Sec-WebSocket-Protocol: chat 
         Sec-WebSocket-Version: 13 
         Origin: http://example.com 
    
  2. Perché a furia usano la stessa interfaccia websocket attualmente implementato in più browser per rilasciare una connessione TCP diretta/connessione IP con la porta dato, senza alcuna roba HTTP?

3. C'è un limite di dimensione dei pacchetti di dati o/limite di buffer per i dati inviati/ricevuti dai client/server? Se è così, abbiamo bisogno di inquadrare i dati e gestirli da soli?

4. Il server WebSocket deve sempre essere un servizio/processo separato? In futuro il server web (IIS, apache) includerà il supporto per l'hosting di server socket Web all'interno del proprio spazio di elaborazione?

+0

domande davvero buone! – GameScripting

+1

Ricordo di aver letto da qualche parte che la prossima versione di Windows Server supporterà socket Web sotto IIS. Windows 2008 non supporta WebSockets a causa dell'implementazione di http.sys. Se trovo il riferimento, lo mando in risposta allo – JoshBerke

risposta

3
  1. Utilizzando una stretta di mano compatibile con HTTP è possibile integrare un gestore WebSocket nel vostro server web o semplicemente avere il server web in avanti la connessione a un server websocket WebSocket dedicato.

  2. L'handshake WebSocket utilizza un handshake HTTP compatibile per consentire la gestione di entrambi i protocolli sulla stessa porta e consente alle configurazioni di firewall esistenti di supportare più facilmente il traffico WebSocket. Inoltre, previene attacchi di script cross-side ben compresi nel contesto delle richieste HTTP e quindi WebSocket sfrutta tale conoscenza. Anche dopo aver stabilito la connessione, WebSocket è , non una connessione raw socket. È un protocollo basato su messaggi e pertanto richiede l'inquadratura. Inoltre, il framing viene mascherato quando viene inviato dal client (browser) al server per alleviare i timori di una vulnerabilità teorica nei proxy/cache/intermediari che agiscono in modo anomalo.

  3. Non esiste un limite per le dimensioni dei messaggi nel protocollo stesso. Un messaggio può essere diviso in più frame. Esiste un limite di protocollo alla dimensione del frame ma è 2^64 byte. Il limite effettivo della dimensione del frame sarà inferiore a seconda dell'implementazione client/server. Se si hanno messaggi singoli da più megabyte che si desidera inviare, si potrebbe prendere in considerazione la possibilità di modificare l'applicazione per utilizzare messaggi più piccoli per massimizzare il supporto tra browser e tra server.

  4. La gestione di WebSocket può essere definitivamente integrata nei server Web e questo è stato uno degli scenari previsti dal gruppo di lavoro.Ad esempio, considera pywebsocket che è progettato per eseguire sia in modalità standalone sia come modulo mod_python in Apache. Come altro esempio, ASP.NET 4.5 and IIS 8 will have built-in support for WebSockets.

+0

Suppongo che il webserver che inoltra la connessione Websocket non sia ancora pratico. – SysAdmin

+0

@SysAdmin vuoi dire che non è pratico per te? Molte persone lo stanno facendo con successo. Una rapida ricerca mi ha dato questi: http://serverfault.com/questions/290121/configuring-apache2-to-proxy-websocket, http://stackoverflow.com/questions/2419346/can-nginx-be-used-as -a-reverse-proxy-for-a-backend-websocket-server, http://www.letseehere.com/reverse-proxy-web-sockets – kanaka

Problemi correlati