【问题标题】:Socket.io Android HTTPS - Connection Error xhr poll errorSocket.io Android HTTPS - 连接错误 xhr poll 错误
【发布时间】:2016-07-09 15:47:35
【问题描述】:

我正在使用 HTTPS 开发一个聊天应用程序。这是我用过的 Socket.IO

服务器

首先我用node.js和node模块"socket.io": "^1.4.5"开发了服务器

在服务器上我有这个:

var secure = {
  ca: fs.readFileSync('ca.pem'),
  key: fs.readFileSync('key.key'),
  cert: fs.readFileSync('cert.crt')
};

var server = https.createServer(secure, app);
var io = require('socket.io')(server);

客户

我用https://cdn.socket.io/socket.io-1.4.5.js开发了网站

我用pod 'Socket.IO-Client-Swift', '~> 5.5.0'开发了iOS应用

最后我正在开发 Android 应用程序

编译('io.socket:socket.io-client:0.7.0'){ 排除组:'org.json',模块:'json' }

在网站和 iOS 应用程序中,我的 websocket 没有问题,但是当我尝试在 Android 应用程序中连接套接字时,我收到以下错误:

io.socket.engineio.client.EngineIOException: xhr 轮询错误

谢谢

【问题讨论】:

  • 我的 Android 应用程序中也出现了同样的错误。但在我的情况下,它只能在网络中正常工作,它不能在 iOS 和 Android 应用程序中工作。你找到解决办法了吗?
  • @RizwanSohaib Android 有什么解决方案吗?
  • @RizwanSohaib 我遇到了同样的问题。在Android Socket.io Websocket Transport does not works in SSL 上查看答案。希望对您有所帮助。
  • 这对你有用吗?
  • 现在我收到 SSLPeerUnverified 错误。 “没有对等证书”

标签: android node.js ssl https socket.io


【解决方案1】:

这很可能是您安装的 android 版本使用服务器不接受的 ssl 套接字协议的问题,反之亦然。

我相信这种情况,因为我在使用 Android 4.4.4 时遇到了同样的问题,但我的 5.1.1 平板电脑工作正常。

另一个例子我们已经看到我们的 OkHttpClient 针对 Spring 服务器的这个问题,我们必须扩展我们自己的 DelegateSSLSocket 来实现:

    @Override
    public void setEnabledProtocols(String[] protocols) {
        super.setEnabledProtocols(new String[]{TlsVersion.TLS_1_1.javaName()});
    }

所以我认为这是一个非常相似的问题。无论如何,解决方法是将您的 Android 操作系统更新到 5.1.1。如果您在没有更新 Android 操作系统的情况下找到其他方法,请告诉我!

【讨论】:

  • 在 Nexus 5X 上的 Android M 和 Android N 上我仍然会遇到这种情况
  • 最后我使用的是 http 而不是 https。我无法为它找到解决方案
【解决方案2】:

如果您尝试通过 HTTPS 连接并在后端使用 Nginx 作为反向代理,请确保正确配置升级选项:

upstream nodes {
  # enable sticky session based on IP
  ip_hash;
  # Backend nodejs server
  server 127.0.0.1:5500;
}


server {
  listen 80;
  # The host name to respond to
  server_name mysite.com;


  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;


    proxy_pass http://nodes;


    # enable WebSockets
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
} 

这对我解决这个神秘的错误很有帮助。

来源: https://nhancv.com/android-socket-io-client-v1-0-0-engineioexception-xhr-poll-error/

【讨论】:

  • 就我而言,这是正确的帮助。非常感谢。
【解决方案3】:

我希望这能解决您的错误:

检查您从浏览器、iOS 和 android 发送的身份验证标头。可能是因为身份验证问题。

Using Socket.IO on android Always Returns XHR Poll Error

https://developer.android.com/training/articles/security-ssl

【讨论】:

  • 请在此处提供答案,而不是使用链接。
猜你喜欢
  • 2017-12-14
  • 2021-10-07
  • 2021-11-11
  • 2014-12-27
  • 2017-08-28
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 2017-01-08
相关资源
最近更新 更多