Play Framework 2.3和Javascript Websocket客户端库

5
我已经安装了新的Play Framework 2.3和Scala 2.11,将构建一个带有WebSocket的应用程序。
使用Scala编写的服务器端代码非常简单:
object TestWebSocket extends Controller {

  def mysocketservice = WebSocket.acceptWithActor[String, String] { request => out =>
    TestSocketActor.props(out)
  }
}

路由配置文件为: GET /wsk/testwebsocket controllers.TestWebSocket.mysocketservice

现在我需要一个 JavaScript 代码将我的页面连接到 Scala 代码,我应该使用哪个 JavaScript 库呢?我看过 socket.io,但似乎只能与 node.js 服务器一起使用。

我知道可以直接使用 WebSocket,但我想使用像 socket.io 这样的库以便兼容旧浏览器。

有人可以帮帮我吗? 非常感谢。


如果有人感兴趣,这里有一个使用Scala和Netty的Socket-IO项目,我认为可以将其集成到Play框架中:https://github.com/mrniko/netty-socketio - faster2b
3个回答

1

试用这个 JavaScript。这是在 Chrome、Safari、Mozilla 等浏览器上的标准方法。

<script type="text/javascript">
    function WebSocketTest(){
        if ("WebSocket" in window){ 
        var ws = new WebSocket("@routes.controllers.TestWebSocket.mysocketservice().webSocketURL()");
        ws.onopen = function(){
            // Web Socket is connected, send data using send()
            console.log("connected");
            ws.send("Message to send");
        };

        ws.onmessage = function (evt){
            var received_msg = evt.data;
            console.log(evt.data);
        };

        ws.onclose = function(){
            // websocket is closed.
            alert("Connection is closed...");
        };
        }else{
            // The browser doesn't support WebSocket
            alert("WebSocket NOT supported by your Browser!");
        }
    }
WebSocketTest();
</script>

让我知道进展如何。

1
谢谢Dario,我正在直接使用WebSocket,但它并不适用于与旧浏览器的兼容性。我希望在未来,socket.io将兼容playframework >=2.3的websocket。谢谢。 - faster2b
如果是这种情况,您可能想使用类似EventSource的东西...就像一个Comet套接字。 - Dario

0

您并不一定需要客户端库来利用WebSockets。 Mozilla在此处提供了WebSockets API的可靠文档。

话虽如此,如果您希望那些使用旧浏览器的访问者也能够利用WebSocket功能,您可以考虑一些项目,例如SockJS,如果需要,它可以优雅地降级到较差但更好支持的协议。


是的,我直接使用WebSocket,但对于与旧浏览器的兼容性来说并不是一个好主意。我希望在未来,socket.io将与playframework >=2.3的WebSocket兼容。谢谢。 - faster2b
1
请注意,我还提供了一个链接到 SockJS,它可以提供您所需的与旧版浏览器的兼容性。更多信息可在此处找到 - kc_

0

我使用优雅的websocket。它非常直观,隐藏了所有的复杂性。

https://code.google.com/p/jquery-graceful-websocket/

// open socket using standard syntax
ws = $.gracefulWebSocket("ws://localhost:9000/soc"); //use wss for https
ws.onmessage=onSocMsg;

function onSocMsg(event){
  var jsonObj=json.fromString(event.data);
  alert(event.data);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接