2013-07-20 15 views
18

Vorrei creare una semplice applicazione Websocket utilizzando Scala/Akka/Play.Websocket semplice in scala/akka/play

Quello che vedo dagli esempi (come lo webchat o lo recent talk at the Scala Days), è una fusione tra JavaScript/Coffeescript, modelli html e così via.

I client della mia applicazione Websocket saranno anche applicazioni mobili native (Android, iOS), quindi ho bisogno di pensare "fuori dal browser".

Come posso creare un'applicazione websocket che può semplicemente spingere una stringa "ciao"?

+0

Sono confuso. WebSockets sono una soluzione alternativa perché HTTP non consente connessioni stateful bidirezionali. Non hai questa limitazione quando sviluppi un'app nativa (eccetto se usi Apache Cordova o simili, ma in questo caso useresti Javascript). Allora perché stai seguendo questa strada? – Carsten

+0

Ciao Carsten. Non conosco altri protocolli duplex che consentano la trasmissione di dati in tempo reale da un server all'altro. I servizi di notifica push per app native (come GCM) non sono in tempo reale. Conosci qualche altro modo alternativo? – ticofab

+0

0MQ è una soluzione per lo streaming pub/sub. http://zeromq.org/ –

risposta

18

Ci sono due parti in una connessione WebSocket: il server e il client. Si può solo fare la parte server utilizzando Play2 e implementare un client con Android (vedi websocket-android-phonegap), iOS (vedi Unitt), javascript app ...

Ecco un esempio per un tempo molto collegamento websocket base tratto da http://blog.tksfz.org/2012/10/12/websockets-echo-using-play-scala-and-actors-part-i/ :

package controllers 

import play.api.mvc._ 

object Application extends Controller { 
    def index = WebSocket.using[String] { 
    val out = Enumerator.imperative[String]() 
    val in = Iteratee.foreach[String] { 
     msg => 
     out.push(msg) 
    } 
    (in, out) 
    } 
} 

è sufficiente impostare un percorso che punta al controller conf/routes:

GET /connect Application.index 

Il server è re ady per correre. È quindi possibile connettersi al WebSocket con un'applicazione javascript, un'applicazione Android, ecc. La parte client è un'altra questione.

Se si utilizza cromato o cromo, basta aprire la console JavaScript nei tool di sviluppo ed è possibile connettersi al server proprio così:

ws = new WebSocket('ws://localhost:9000/connect') 
ws.onmessage = function(message) { console.log(message); }; 
ws.send('test') 

invierà indietro il vostro messaggio e accedere nel javascript console ogni volta che ne invii uno.

Si potrebbe anche solo utilizzare il test http://www.websocket.org/echo.html eco e nutrire il vostro 'ws://localhost:9000/connect' url.

+8

'Enumerator.imperative' sembra essere deprecato o rimosso dalle versioni recenti di Play, questa è un'app eco in una versione più recente: http://blog.controlgroup.com/2013/10/17/simple-websockets-example- play-2-2-0/spero che questo aiuti qualcun altro ... – spacemanaki