我无法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)
}
}
路线描述为
GET /ws2 controllers.Application.indexWS2
我从这样的JS客户端创建连接
myWebSocket = new WebSocket("ws://localhost:9000/ws2");
一切正常。但是,如果为了使用TLS而更改ws://
为wss://
它,它将失败,并且出现以下Netty异常:
[error] p.nettyException - Exception caught in Netty
java.lang.IllegalArgumentException: empty text
我该如何工作?谢谢。
我真的很想为您解决这个问题!但是我不喜欢这个答案。似乎尚无针对Websocket的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
}
}
Nginx非常轻巧有趣。会毫不犹豫地选择此选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句