2016-08-09 84 views
0

我有一個使用網絡套接字的Play 2.5應用程序。在我的控制器我建立爲動態獲取網絡套接字URL

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"); 

但是,我開始將我的東西從localhost移開,並且需要一種方法來引用我的javascript文件中的url。該URL可能會更改(並且根據開發環境可能會有所不同)。那麼,我怎樣才能動態地引用這個URL呢?也就是說,我怎麼說

var socket = new Websocket(URL_OF_WEBSOCKET) 

我想打破它在我的配置文件,並試圖這樣做的,但我不那麼肯定會工作。

任何和所有幫助,將不勝感激。

回答

1

如果您使用的是純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屬性導入文件。然後你可以在需要的地方重複使用它。

+0

我最終做了一件非常相似的事情。我將我的不同套接字放入我的'conf'文件夾中的不同配置文件中。然後我使用'ConfigFactor.load.getConfig(「...」)'把它取出。謝謝 – LivingRobot

0

如果URL,讓您的應用程序的主界面是相同或部分相同的連接的WebSocket,假設: 網址應用:myapp.com 的WebSocket網址:myapp.com/push-notification 所以,你可以在做使用JS標準API的window.location

var tcp = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; var host = window.location.host; var path = '/push-notification'; var ws = new WebSocket(tcp+host+path);

喜歡的東西,你的js文件.. 我希望它能幫助。