【问题标题】:Dynamically get web socket URL动态获取 web socket URL
【发布时间】:2016-12-16 01:49:59
【问题描述】:

我有一个使用网络套接字的 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 scala websocket playframework-2.0


    【解决方案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 属性导入文件。然后你可以在需要的地方重复使用它。

    【讨论】:

    • 我最终做了非常相似的事情。我将不同的套接字放入conf 文件夹中的不同配置文件中。然后我用ConfigFactor.load.getConfig("...") 把它弄出来了。谢谢
    【解决方案2】:

    如果获取应用程序主页的 URL 与连接 websocket 的 URL 相同或部分相同,假设: 网址应用:myapp.com Websocket 网址:myapp.com/push-notification 所以你可以在你的js文件中使用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);

    类似的东西.. 希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2020-02-19
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多