【问题标题】:Error in creating a websocket connection within a hybrid app在混合应用程序中创建 websocket 连接时出错
【发布时间】:2017-03-16 23:46:20
【问题描述】:

我有一个使用 socket.io (1.4.5) 建立 websocket 连接的应用程序。该应用程序可通过 Web URL 获得,也可作为使用 Trigger.io 的打包 Android 应用程序获得。

Android 应用无法连接到我的 websocket 服务器。这是我收到的错误

WebSocket connection to 'wss://myserver.com/socket.io/?user_id=xxx&session_token=xxx&EIO=3&transport=websocket' failed: Unspecified reason

它在 socket.io 客户端中引用的行在 doOpen() 方法中。

this.ws = BrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts);

据我所知,我没有对 websocket 服务器进行任何更改。并且网站本身运行良好并且能够连接到 websocket 服务器。

我已经使用 Chrome Devtools 检查了 Trigger.io Android 应用程序,当我手动尝试连接到我的 websocket 服务器时,我得到了同样的错误。下面这行代码不起作用。

new WebSocket("wss://myserver.com/socket.io/?user_id=xxx&session_token=xxx&EIO=3&transport=websocket")

在 Chrome 浏览器中运行同一行代码就可以了。

另外,错误响应似乎太快了。看起来混合应用程序中的 webview 甚至没有尝试连接。无论 websocket 服务器是否正在运行,响应都是相同的。输入无意义的 URL 也会出现同样的错误。

new WebSocket("wss://blahblah"); //gives the same error and response immediately

Trigger 应用中的 Chrome 版本是 55.0.2883.91。

编辑:我在运行应用程序的设备的移动浏览器上测试了 websocket 连接,只是为了确保它不是代理/连接问题。这很好用。

【问题讨论】:

  • 你能创建到其他服务器的连接吗?也可以尝试不使用安全连接,以确保您可以连接到某个地方。
  • @Janne 我尝试连接到我知道可以工作的两个不同的套接字服务器,但仍然没有通过相同的错误。
  • @Janne 据我所知,Trigger 不再使用 Android 原生 webview。它使用 Chrome 网络视图。当我运行一个用户代理检查这就是我得到的 - Mozilla/5.0 (Linux; Android 7.0; ONEPLUS A3003 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36

标签: javascript socket.io trigger.io


【解决方案1】:

解决方法是在 Trigger 中使用 httpd 模块。

设置 httpd 服务器会使应用程序使用 http://localhost URL 而不是 contents: 或 file: 协议。有了这个,任何阻止连接的 Chrome CSP 问题都会被解除。

模块文档:https://trigger.io/modules/httpd/current/

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2015-12-11
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多