Scala: come incorporare un piccolo server web in un'applicazione Scala?

voti
9

Per un po 'progetto educativo inteso come una risorsa della comunità per aiutare le persone ad imparare Scala Sto cercando un modo semplice per servire e pagine web di processo in un thread in background.

sfondo minima: Scalatron è un gioco multi-player in cui i programmi bot giocatori pit (scritti in Scala) uno contro l'altro. Esso è accompagnato da uno step-by-step Scala tutorial. Attualmente i giocatori devono usare un IDE sulle loro macchine locali per compilare i bot, che vengono poi pubblicati in gioco copiandoli in una directory di rete condivisa. Questo è ingombrante. Per la prossima versione sarebbe bello offrire l'editing bot basata su browser e la pubblicazione per semplificare al massimo la configurazione per organizzatori e giocatori.

Ho già avuto uno sfondo di lavoro filo che compilerà Scala codice sorgente che arrivano sul server al volo (ovviando alla necessità di un IDE completo). Successivo devo eseguire un web server molto piccolo per fornire un punto di accesso per i giocatori e per gestire upload bot (questo si libera della condivisione di rete).

I requisiti sono molto semplici: inizialmente Prevedo che serve una sola pagina con una casella di testo e un pulsante Go (= upload all'assistente, compilare e pubblicare in gioco); Mi aspetto che non più di 20 utenti simultanei con non più di uno di upload bot attraverso tutti gli utenti ogni 5 o 10 secondi; Ho bisogno di mantenere lo stato minimo per ogni utente (solo un nome) e ho bisogno di restituire i messaggi di errore del compilatore per l'utente. Si noti che gli aggiornamenti dello schermo di gioco non sarebbero visualizzati nel browser, ma su un proiettore collegato alla macchina server. E in primo luogo per permettere la più semplice possibile configurazione (fare doppio clic sul server di gioco .jar) Penso che sarebbe bello per eseguire il web server in un thread in background all'interno del server di gioco esistente.

Qual è il modo più appropriato per fare questo? Dovrei usare un quadro di riferimento esistente, come Play o Sollevare? C'è codice esistente per fare qualcosa di molto simile a questo? E 'anche ragionevole piano per eseguire un web server in un thread in background come questo? Ogni consiglio è apprezzato.

È pubblicato 29/03/2012 alle 19:42
dall'utente
In altre lingue...                            


6 risposte

voti
2

Uno dei piccoli, server Web embeddable / servlet container più utilizzati al mondo Java è Jetty . Dal momento Scala può facilmente utilizzare librerie Java, dovrebbe essere facile da usare questo da Scala.

Questa pagina mostra alcuni semplici esempi (in Java) su come iniziare come un server HTTP incorporato.

Risposto il 29/03/2012 a 19:45
fonte dall'utente

voti
0

Come si vuole fornire un quadro, credo che la soluzione migliore è quella di utilizzare una struttura esistente, in questo modo non sarà necessario preoccuparsi di roba re-inventare.

Dalla mia esperienza personale, che è davvero soggettivo, vorrei suggerire di utilizzare Ascensore come so che è molto potente per il supporto di sessioni, frammenti globali e altre cose. Si può cercare di estendere la classica applicazione di chat che viene utilizzato come un esempio di come funziona ascensore, collaudo montone castrato è utile per il vostro uso o meno non dovrebbe essere lungo.

Risposto il 29/03/2012 a 19:52
fonte dall'utente

voti
3

Embedding Jetty è abbastanza facile, essendo uno degli obiettivi primari del progetto Jetty. Se le vostre esigenze sono semplici, questo è il percorso più veloce. Ho il sospetto che sarete rapidamente bisogno di una soluzione più robusta (modelli, di routing, template, ecc) in modo da utilizzare un framework come Ascensore o giocare quadro sarebbe un'idea migliore.

Risposto il 29/03/2012 a 19:54
fonte dall'utente

voti
10

Server Web incorporato è esattamente ciò che non filtrato è stato fatto per. La filosofia di base per non filtrato è che il server web è solo una libreria si chiama dal codice, invece del codice essere qualcosa le chiamate framework web.

Risposto il 29/03/2012 a 20:15
fonte dall'utente

voti
1

Qui ci sono un paio di diversi esempi di embedding container Java e quadri Scala:

Mentre entrambi questi parlano di eseguire l'applicazione su Heroku, si può semplicemente eseguire le applicazioni standalone Scala.

Risposto il 29/03/2012 a 20:43
fonte dall'utente

voti
1
val webServer = new Thread("Web Server") {
  def response(text: String, code: String = "200 OK") =
    """HTTP/1.0 """ + code + """
  Content-Type: text/html
  Content-Length: """ + text.length + """

  """ + text

  override def run {
    for(port <- env.webPort) {
      val ss = new ServerSocket(port)
      while (true) try {
        val s = ss.accept
        try { s.getOutputStream.write(response(someStuff.toString).getBytes)
        } finally { s.close }
      } catch { case ie: InterruptedException => return }
    }
  }
}

Vedi anche gattini Scala

Risposto il 13/06/2012 a 01:30
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more