Michael Neale의 솔루션에 추가.
같이, 재생이
2013 그래서 간단하게 작동하지 않을 것입니다 SSL로 전환 10 월 말 기준으로, 기본적으로 WSS를 지원하지 않습니다 there을 밝혔다.
감사하게도 SSL을 사용하도록 앱을 구성하면 Cloudbees가 Nginx 서버를 라우터로 설정하고 SSL 끝점을 라우터로 설정하므로 설명 된 해결 방법이 there으로 작동합니다.
사용자 정의 도메인 이름과 해당 Cloudbees 앱 별칭을 만들고 Cloudbees 라우터에서 SSL 인증서를 설정하고 해당 Cloudbees 라우터를 사용하도록 앱을 구성하면 웹 소켓에 연결할 수 있습니다 .
그러나 일반 재생 경로 확인자를 사용하면 URL이 안전해야하므로 강제로 재생됩니다. wss : // ...가 아니라 wss : // ...를 반환합니다. websockets URL.
구체적 예로서 아웃 오브 박스 Play Framework sample Scala Websocket Chat app 사용 :
CONT/노선은 정의
GET /room/chat controllers.Application.chat(username)
응용 정의
def chat(username: String) = WebSocket.async[JsValue] { request => ChatRoom.join(username) }
및 chatRoom.scala.js가 웹 소켓을 만듭니다 :
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket
var chatSocket = new WS("@routes.Application.chat(username).webSocketURL()")
작동하지 않습니다, @routes 때문에 .... webSocketURL()는 WS를 반환합니다 : // 아니라 WSS : // URL로 표시됩니다.
chatRoom.scala.// 또는 http : // 페이지 :이 도움이
var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket;
var wsUrl = "@controllers.api.routes.PubSubController.chat(username).webSocketURL()";
if(window.location.protocol == "https:") wsUrl = wsUrl.replace("ws:","wss:");
var chatSocket = new WS(wsUrl);
희망 JS는 관계없이이 HTTPS 내에서 실행 여부의 작동하도록 다음과 같이 수정 될 수 있습니다.
안 X-전달 - 프로토 헤더 연결이 안전한 것을 재생 말해 볼 - 및 URL을 작성할 때 WSS를 사용할 수 있나요? 그렇지 않으면 - 그게 내가 생각하는 플레이 버그입니다. –