Próbuję nauczyć się korzystać z gniazd internetowych w wersji 2.1 i mam problemy z uzyskaniem adresu URL gniazda sieciowego do pracy z konfiguracją routingu mojej aplikacji. Zacząłem od nowej aplikacji Play i Play framework documentation on websockets.Podstawy routingu i gniazd internetowych gier podstawowych
Oto mój conf/routes
:
# Home page
GET / controllers.Application.index
# Websocket test site
GET /wstest controllers.Application.wstest
Potem dodałem funkcję wstest
do mojej klasy kontrolera:
object Application extends Controller {
def index = Action {
Ok(views.html.index("Websocket Test"))
}
def wstest = WebSocket.using[String] { request =>
// Log events to the console
val in = Iteratee.foreach[String](println).mapDone { _ =>
Logger.info("Disconnected")
}
// Send a single 'Hello!' message
val out = Enumerator("Hello!")
(in, out)
}
}
Jednak, jak dotąd, nie mogę przejść tylko websocket z adresem URL ws://localhost:9000/wstest
(przy użyciu przykładowego kodu pod numerem websocket.org/echo.html). Szukałem w aplikacji sample/scala/websocket-chat
że pochodzi z ramami Play i używa pliku konfiguracyjnego routingu do odniesienia websocket, tak:
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
var chatSocket = new WS("@routes.Application.chat(username).webSocketURL()")
Próbowałem zastępując mój websocket URL z @routes.Application.wstest.webSocketURL()
i @routes.Application.wstest
. Pierwszy nie kompiluje się. Drugi kompiluje, ale klient i serwer nie wymieniają żadnych wiadomości.
Jak korzystać z konfiguracji routingu w Play, aby uzyskać dostęp do tego websocket? Co ja tu robię źle?
Edit
Oto zrzut ekranu z mojego błędu kompilacji, "Nie można znaleźć żadnego żądania HTTP Header tutaj":
Dzięki za wskazówki. Dodałem zrzut ekranu z błędem kompilacji. –
Tak, w tym przypadku brakuje niejawnego żądania w szablonie, po prostu dodaj kolejną listę parametrów za pomocą '(niejawnego żądania: RequestHeader)'. –