2010-11-06 11 views
29

Come posso eseguire un server WebSocket su Google App Engine? È possibile? Sarà possibile?Come posso eseguire un server WebSocket su GAE?

+1

Dal 2010 al 2013 molte cose sono cambiate. Vedi Canale https://developers.google.com/appengine/docs/python/channel/?csw=1 –

+0

@JosepValls, la soluzione è basata sullo standard WebSocket o è una tecnologia specifica di Google? – Pacerier

risposta

24

È possibile?

No.

Non è possibile in questo momento perché GAE non consente generici connessioni socket in entrata. Ogni richiesta è inoltre limitata a 30 secondi, ma ciò potrebbe facilmente essere risolto con la riconnessione automatica e il monitoraggio della sessione.

Sarà possibile?

Probabilmente.

Google è stato uno dei principali (principali) promotori dello standard WebSockets. Sarei sorpreso se non spingessero il supporto per farlo in GAE ad un certo punto in futuro. Si noti che lo standard di bozza di WebSockets è ancora in fase di flusso, quindi Google potrebbe essere riluttante ad aggiungere supporto prima che lo standard sia più solido.

Ecco il bug per WebSockets supporto su GAE: http://code.google.com/p/googleappengine/issues/detail?id=2535

Si noti che un dipendente di Google indica che non è sulla tabella di marcia, ma che sanno che sarebbe utile. È una risposta tanto positiva quanto ne ricavate da Google su funzionalità che non sono state annunciate. Raccomando di aggiungere la tua voce a quel bug in favore del supporto WebSocket. Non può far male.

Inoltre, a seconda dell'applicazione in uso, si può considerare l'API del canale che sarà probabilmente il supporto GAE presto:

EDIT (2015): il L'API di Canali è ora disponibile (è stata per un po ').

+1

Vedere il canale https://developers.google.com/appengine/docs/python/channel/?csw=1 –

+1

I Non sono in grado di creare canali sul lato client. Puoi rispondere a questo http://stackoverflow.com/questions/34332222/unable-to-creare-new-channel-in-javascript-of-channel-api –

+2

EDIT 2016: i canali sono ora obsoleti ... –

2

Non è possibile.

GAE limita le richieste HTTP a 30 secondi, WebSockets prevede di avere una connessione aperta per un lungo periodo.

Sarà possibile? Solo Google lo sa.

+1

Il limite di 30 secondi della richiesta non è davvero un blocco importante. Sarebbe facile creare un layer che avvii una nuova connessione WebSockets per la stessa sessione prima che la vecchia richiesta scada, in modo da non lasciare spazi vuoti nella comunicazione. Solo il permettere le richieste HTTP in entrata è il vero killer. – kanaka

+1

Websocket sono bidirezionali (come HTTP) ma vengono avviati solo in ingresso (da client a server). http://en.wikipedia.org/wiki/WebSockets –

+1

E GAE è anche in uscita: utilizza l'URL Fetch –

9

E 'ufficialmente supportato ora.

Vedi https://cloud.google.com/appengine/docs/python/channel/

EDIT: l'API canale è supportato, non WebSockets. L'API del canale è costruita su WebSockets, ma non ti dà accesso diretto al WebSocket. Suppongo che sia abbastanza buono per le tipiche applicazioni Web.

+1

Per posterità, l'API Canali è solo frontend-> backend. Non va bene per le connessioni server-> server. –

+2

È anche in fase di tramonto e smetterà di funzionare a partire dal 2017-10-31: https://cloud.google.com/appengine/docs/deprecations/channel – sengi

+0

https://i.ytimg.com/vi/xZ_JiU7L9Zk/hqdefault .jpg –

1

C'è anche questo: https://cloud.google.com/appengine/docs/go/sockets/ Si tratta di un livello sperimentale e molto basso.

+0

"Gli zoccoli sono disponibili solo per le app pagate Non è possibile creare un socket di ascolto, è possibile solo creare socket in uscita." –

10

Tutte queste risposte non sono aggiornate.

L'API canale è stata deprecated. Google fortemente consiglia di utilizzare Firebase.

Vale anche la pena notare che Google ha ora rilasciato lo flexible environment.

Con l'ambiente flessibile, è possibile consentire facilmente connessioni socket o utilizzare Python 3.