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?