2016-02-08 29 views
5

Akka http websockets'ını connection.handleWithAsyncHandler ile çalışmak için alamıyorum. KonsoldaEşzamansız işleyici ile Websocket

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
<body> 
<script> 
    var ws = new WebSocket('ws://localhost:9000/websocket'); 

    ws.onopen = function() { 
     console.log('open'); 

     ws.send('test message'); 
    }; 

    ws.onmessage = function(msg) { 
     console.log(msg.data); 
    }; 

    ws.onclose = function() { 
     console.log('close'); 
    }; 
</script> 
</body> 
</html> 

Ben

open 
close 
olsun: İşte bunu test etmek için

import akka.actor.ActorSystem 
import akka.http.scaladsl.Http 
import akka.http.scaladsl.model.HttpMethods._ 
import akka.http.scaladsl.model._ 
import akka.http.scaladsl.model.ws.{Message, UpgradeToWebsocket} 
import akka.stream.ActorMaterializer 
import akka.stream.scaladsl.{Flow, Sink} 

import scala.concurrent.Future 

object Server extends App { 
    implicit val system = ActorSystem("server-system") 
    implicit val materializer = ActorMaterializer() 
    implicit val dispatcher = system.dispatcher 
    implicit val formats = net.liftweb.json.DefaultFormats 

    val serverSource = Http().bind(interface = "localhost", port = 9000) 

    val requestHandler: HttpRequest => Future[HttpResponse] = { 
     case request @ HttpRequest(GET, Uri.Path("/websocket"), _, _, _) => { 
      Future { 
       request.header[UpgradeToWebsocket] match { 
        case Some(upgrade) => { 
         upgrade.handleMessages(Flow[Message]) 
        } 
        case None => { 
         HttpResponse(StatusCodes.BadRequest) 
        } 
       } 
      } 
     } 
     case _: HttpRequest => { 
      Future.successful(HttpResponse(StatusCodes.BadRequest)) 
     } 
    } 

    val bindingFuture = serverSource.to(Sink.foreach { connection => 
     connection.handleWithAsyncHandler(requestHandler) 
    }).run() 
} 

ve benim JS kodu (i akka http son sürümünü kullanıyorum) scala benim kodudur

Web socket bağlantısı neden açıldıktan sonra doğrudan kapatılıyor?

cevap

1

Güncelleme akka 2.4.2-RC2 için hile yaptı.