Play Framework 2.3 和 javascript websocket 客户端库
Posted
技术标签:
【中文标题】Play Framework 2.3 和 javascript websocket 客户端库【英文标题】:Play Framework 2.3 and javascript websocket client library 【发布时间】:2014-06-02 18:11:51 【问题描述】:我已经使用 Scala 2.11 安装了新的 Play Framework 2.3,我将使用 websocket 构建一个应用程序。
带有 scala 的服务器,代码非常简单:
object TestWebSocket extends Controller
def mysocketservice = WebSocket.acceptWithActor[String, String] request => out =>
TestSocketActor.props(out)
route.conf 是: GET /wsk/testwebsocket controllers.TestWebSocket.mysocketservice
现在我需要一个 javascript 代码来将我的页面与 scala 代码连接起来,我可以使用什么 javascript 库?我见过一个 socket.io,但似乎只适用于 node.js 服务器。
我知道我可以直接使用 WebSocket,但我将使用像 socket.io 这样的库来与旧浏览器兼容。
有人可以帮助我吗? 非常感谢
【问题讨论】:
如果有人有兴趣,有一个使用 scala 和 netty 的 socket-io 的项目,我认为可以将它集成到游戏框架中:github.com/mrniko/netty-socketio 【参考方案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>
让我知道进展如何。
【讨论】:
谢谢Dario,我是直接使用WebSocket的,但是为了兼容旧版浏览器并不是一个好主意。我希望将来 socket.io 将与 playframework >=2.3 的 websocket 兼容。谢谢 如果是这种情况,您可能想要使用 EventSource 之类的东西......就像 Comet 套接字。【参考方案2】:您不一定需要客户端库来利用 WebSockets。 Mozilla 提供了关于 WebSockets API here 的可靠文档。
话虽如此,如果您希望旧版浏览器上的访问者能够利用您的 WebSocket 功能,您可能需要研究像 SockJS 这样可以优雅地回退到劣质(但得到更好支持)协议的项目,如果需要。
【讨论】:
是的,我直接使用WebSocket,但是为了与旧浏览器的兼容性,这不是一个好主意。我希望将来 socket.io 将与 playframework >=2.3 的 websocket 兼容。谢谢 请注意,我还提供了一个指向 SockJS 的链接,它可以提供与您需要的旧浏览器的兼容性。 More info can be found here.【参考方案3】:我使用优雅的 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);
【讨论】:
以上是关于Play Framework 2.3 和 javascript websocket 客户端库的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework 2.3 - 无法连接到远程数据库 Linux (Play) -> Win 7 (MySQL)
迁移到 2.4.x (Java) 后在 Play Framework 中运行测试时出错
如何在 Play Framework 2.3 中向 FakeRequest 添加查询字符串参数?