기본 시간 초과가 발생하는지 잘 모르겠지만 (어딘가에 설정할 수 있습니까?), 아마도 누락되었습니다. 클라이언트의 브라우저가 websocket 연결을 설정하면 나는 지속성을 유지합니다. 그런 다음 연결이 끊어지면 해당 영구 객체를 삭제합니다. 충분히 간단합니다. 클라이언트가 브라우저를 닫을 때 은 일반적으로으로 시작되지만 클라이언트가 Wi-Fi 연결을 해제 할 때 이 아닌 경우 (MacBook Pro에서 테스트 할 때 문제가되는 것은 아닙니다). 스칼라 컨트롤러에서 Websocket '하드'연결이 명확하지 않습니까?
, 나는 모든in
메시지를 기록하고 있지만,
아무것도는 Wi-Fi를 끄면을 통해 온다합니다 (
docs에서, 내가 EOF를 기대?).
나는 서버가 웹 소켓 연결을 닫아야합니다, 문제를 기록해야 내가 WS protocol를 해석하는 방법에서 가져온로이 버그해야한다고 생각합니다.하지만 후자는 발생하지 않습니다.
누구에게이 경험이 있습니까? 나는 간단한 컨트롤러와 내 구성과 일치하는 것을 시도했다. 아래의 ws3
또는 ws2
컨트롤러가 아닙니다. 놀이! 아래 코드 :
object Application extends Controller {
private def ws(out: PushEnumerator[String]) = {
Logger.logger.info("ws()")
val in = Iteratee.foreach[String](x => {
Logger.logger.info("Websocket msg: " + x)
try {
x match {
case "persist" => Logger.logger.info("PERSIST")
}
} catch {
case e: Exception => {
Logger.logger.info("NOT RECOGNIZED COMMAND, NO PERSIST")
}
}
}).mapDone { x =>
Logger.logger.info("STOP PERSIST")
}
in
}
def ws2() = WebSocket.using[String] { request =>
Logger.logger.info("ws2()")
val out = Enumerator.imperative[String]()
val in = ws(out)
(in, out)
}
def ws3() = WebSocket.using[String] { request =>
Logger.logger.info("ws3()")
val out = Enumerator.imperative[String]()
val in = Iteratee.foreach[String](x => {
Logger.logger.info("Websocket msg: " + x)
try {
x match {
case "persist" => Logger.logger.info("PERSIST")
}
} catch {
case e: Exception => {
Logger.logger.info("NOT RECOGNIZED COMMAND, NO PERSIST")
}
}
}).mapDone { x =>
Logger.logger.info("STOP PERSIST")
}
(in, out)
}
def view() = Action { implicit request =>
Ok(views.html.index.render(""))
}
}
보기는 간단하다 :
@(message: String) @main("Welcome to Play 2.0") {
@play20.welcome(message) }
<script type="text/javascript" charset="utf-8">
var sock = new WebSocket("ws://192.168.1.120:9001/ws3");
sock.onopen = function(event) {
sock.send('persist');
}
</script>
경로 :
이GET /ws2 controllers.Application.ws2
GET /ws3 controllers.Application.ws3
GET /view controllers.Application.view
경영이 내가 두려워했던 것이 었습니다. https://code.google.com/p/chromium/issues/detail?id=76358 -에도이 URL이 있습니다. 이것은 프레임 워크에 내장 된 것이거나 적어도 말한 것이어야합니다. 감사! –
"socket.io"서버 메모리 크리프도이 범주에 속합니다. –