Wie für die Verwendung von TLS im Spiel ist!Framework, WebSockets ("wss://")
Kann ich nicht verwenden wss://
in meiner einfachen WebSocket-app erstellt, mit Spielen!Framework 2.2. Es hallt die Nachricht zurück. Der Endpunkt wird wie dieser
def indexWS2 = WebSocket.using[String] {
request => {
println("got connection to indexWS2")
var channel: Option[Concurrent.Channel[String]] = None
val outEnumerator: Enumerator[String] = Concurrent.unicast(c => channel = Some(c))
//Log events to the console
val myIteratee: Iteratee[String, Unit] = Iteratee.foreach[String] {gotString => {
println("received: " + gotString)
//send string back
channel.foreach(_.push("echoing back \"" + gotString + "\""))
}}
(myIteratee, outEnumerator)
}
}
und die route ist beschrieben, wie
GET /ws2 controllers.Application.indexWS2
Erstelle ich eine Verbindung aus einem JS-client wie diese
myWebSocket = new WebSocket("ws://localhost:9000/ws2");
und alles funktioniert einwandfrei. Aber wenn ich ws://
in wss://
um TLS verwenden, schlägt es fehl und ich bekomme folgende Netty Ausnahme:
[error] p.nettyException - Exception caught in Netty
java.lang.IllegalArgumentException: empty text
Wie kann ich diese Arbeit machen? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich wirklich wollte, um dies herauszufinden, für Sie! Aber ich wusste nicht, wie die Antwort. Es scheint, es gibt kein Spiel noch Unterstützung für SSL für websockets. Sah, erwähnen, die es hier und kein Zeichen von Fortschritt, da:
http://grokbase.com/t/gg/play-framework/12cd53wst9/2-1-https-and-wss-secure-websocket-clarifications-and-documentation
Jedoch, es gibt Hoffnung! Sie können Sie verwenden nginx als eine sichere websocket - (wss -) Endpunkt, zum weiterleiten an einen internen play-app eine unsichere websocket endpoint:
Die Seite http://siriux.net/2013/06/nginx-and-websockets/ sofern diese Erklärung und Beispiel proxy-Konfiguration für nginx:
Ziel: WSS-SSL-Endpunkt:
forwards wss|https://ws.example.com to ws|http://ws1.example.com:10080
"Der proxy auch SSL-Endpunkt für WSS und HTTPS-verbindungen. So können sich die Kunden mit wss://- verbindungen (z.B. von Seiten bedient via HTTPS), die Arbeit besser mit Defekten proxy-Server, etc."
Nginx ist so leicht und macht Spaß. Würde nicht zögern, gehen mit dieser option.
Haben Sie versuchen, die Aktivierung des https-Unterstützung auf dem server Spielen? Es sieht aus wie Sie versuchen, eine Verbindung zum http-port mit wss kann das nie funktionieren, müssen Sie https aktivieren, und ändern Sie dann die URL nicht nur auf wss, aber auch die Verwendung der https-port.
Starten, um ein Spiel-server mit ssl eingeschaltet:
Dann eine Verbindung zu
wss://localhost:9443/ws2
.wss
funktioniert einwandfrei mit Spielen, 2.6.Statt fest die websocket-url können Sie die url via-Routen:
Andere Möglichkeit ist die Verwendung SockJS, wie das Websocket-Schicht, SockJS Umsetzung für Play2 finden Sie unter
https://github.com/fdimuccio/play2-sockjs
Wenn HTTPS aktiviert ist, eine wss-endpoind erstellt von SockJS über den HTTPS-Kanal. Play2-sockjs unterstützt auch die Schauspieler Muster wie bei nativen Spielen websockets.
Wenn Sie nicht möchten, zu verwenden, SockJS in der clientseitigen sondern Kraft-browser websocket-Implementierung können Sie verwenden Sie die explizite websocket endpoint wss:////websocket