在混合应用程序中创建 websocket 连接时出错

Error in creating a websocket connection within a hybrid app

我有一个使用 socket.io (1.4.5) 建立 websocket 连接的应用程序。该应用程序可通过网络 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 浏览器中工作得很好。

另外,错误响应似乎太快了。看起来混合应用程序中的网络视图甚至没有尝试连接。无论 websocket 服务器是否为 运行,响应都是相同的。输入无意义的 URL 会产生同样的错误。

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

触发器应用程序中的 Chrome 版本是 55.0.2883.91。

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

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

设置 httpd 服务器使应用程序使用 http://localhost URL 而不是 contents: 或 file: 协议。有了这个,无论什么 Chrome CSP 问题都阻止了连接。

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