tic*_*fab 11 ssl websocket playframework playframework-2.2
我不能wss://在我用Play!Framework 2.2创建的简单WebSocket应用程序中使用.它回复了消息.端点是这样的
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)
}
}
Run Code Online (Sandbox Code Playgroud)
并且路线被描述为
GET /ws2 controllers.Application.indexWS2
Run Code Online (Sandbox Code Playgroud)
我从这样的JS客户端创建连接
myWebSocket = new WebSocket("ws://localhost:9000/ws2");
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,如果我改变ws://成wss://以使用TLS,它失败,我得到以下Netty的例外:
[error] p.nettyException - Exception caught in Netty
java.lang.IllegalArgumentException: empty text
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?谢谢.
sda*_*zig 11
我真的很想为你解决这个问题!但我不喜欢这个答案.对于websockets,SSL似乎还没有Play支持.在这里提到它并且没有任何进展迹象:http: //grokbase.com/t/gg/play-framework/12cd53wst9/2-1-https-and-wss-secure-websocket-clarifications-and-documentation
但是,有希望!您可以使用nginx作为安全websocket(wss)端点,使用不安全的websocket端点转发到内部播放应用程序:
页面http://siriux.net/2013/06/nginx-and-websockets/为nginx提供了此解释和示例代理配置:
目标:WSS SSL端点: forwards wss|https://ws.example.com to ws|http://ws1.example.com:10080
"代理也是WSS和HTTPS连接的SSL端点.因此客户端可以使用wss://连接(例如来自通过HTTPS提供的页面),这些连接可以更好地处理损坏的代理服务器等."
server {
listen 443;
server_name ws.example.com;
ssl on;
ssl_certificate ws.example.com.bundle.crt;
ssl_certificate_key ws.example.com.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# like above
}
}
Run Code Online (Sandbox Code Playgroud)
Nginx非常轻巧有趣.会毫不犹豫地选择这个选项.
您是否尝试在Play服务器上启用https支持?看起来你正在尝试使用wss连接到http端口,它永远不会工作,你需要启用https,然后更改URL不仅仅是wss,还要使用https端口.
要在启用ssl的情况下启动Play服务器:
activator run -Dhttps.port=9443
Run Code Online (Sandbox Code Playgroud)
然后连接到wss://localhost:9443/ws2.
| 归档时间: |
|
| 查看次数: |
5288 次 |
| 最近记录: |