我有一个使用web套接字的Play 2.5应用程序。在控制器中,我将其设置为
def socket = WebSocket.accept[JsValue, JsValue] { request =>
ActorFlow.actorRef(out => TroiWebSocket.props(db, out, comm.communicator, system))
}
它在我的路由中被访问为
GET /push-notifications controllers.Application.socket
目前,我的应用程序在本地运行,我可以使用
在javascript文件中引用套接字。var socket = new WebSocket("ws://localhost:9000/push-notifications");
然而,我开始移动我的东西远离本地主机,需要一种方法来引用我的javascript文件中的url。此URL可能会更改(并且可能根据开发环境而有所不同)。如何动态引用这个URL呢?也就是说,
怎么写var socket = new Websocket(URL_OF_WEBSOCKET)
我想在我的配置文件中分解它,并尝试这样做,但我不确定这会起作用。
我将不胜感激。
如果你使用的是纯javascript。声明一个config.js文件,并定义一些全局对象和一些配置数据。
<html>
<head>
<script>
var config = {
"localWSUrl" : "ws://localhost:9000/socket",
"wsUrl" : "ws://serverurl.com:443/socket"
}
</script>
<script>
console.log(config.wsUrl);
</script>
</head>
<body>
</body>
</html>
为简单起见,我把所有内容都写在一个文件中。您可以排除配置部分,并通过脚本标记的src属性导入该文件。然后你可以在需要的地方重用它
如果获取应用程序主页面的URL与连接websocket的URL相同或部分相同,假设:Url app: myapp.comWebsocket url: myapp.com/push-notification你可以在js文件中使用window.location
/js标准api
var tcp = window.location.protocol === 'https:' ? 'wss://' : 'ws://';
var host = window.location.host;
var path = '/push-notification';
var ws = new WebSocket(tcp+host+path);
大概是这样…