2016-02-08 20 views
5

Tôi không thể nhận các webmail http của Akka hoạt động với connection.handleWithAsyncHandler. Đây là mã của tôi trong scala (Tôi đang sử dụng phiên bản mới nhất của AKKA http)Websocket với trình xử lý async

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() 
} 

và mã JS của tôi để kiểm tra nó:

<!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> 

Trong giao diện điều khiển tôi nhận được

open 
close 

Tại sao kết nối websocket đóng trực tiếp sau khi được mở?

Trả lời

1

Cập nhật lên akka 2.4.2-RC2 đã thực hiện thủ thuật.

Các vấn đề liên quan