我正在使用HTTPS开发聊天应用程序。这是我用过的Socket.IO
首先,我使用node.js和节点模块"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'
最后,我正在使用
开发Android应用程序compile ('io.socket:socket.io-client:0.7.0') { exclude group: 'org.json', module: 'json' }
在网站和iOS应用程序中我对websocket没有任何问题,但是当我尝试在Android应用程序中连接套接字时,我收到以下错误:
io.socket.engineio.client.EngineIOException:xhr民意调查错误
由于
答案 0 :(得分:1)
如果您尝试通过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/
答案 1 :(得分:0)
这很可能是您安装的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操作系统的情况下找到其他方式,请告诉我们!
答案 2 :(得分:-1)
我希望这可以解决您的错误:
检查您从浏览器,iOS和android发送的身份验证标头。可能是由于身份验证问题。
Using Socket.IO on android Always Returns XHR Poll Error
https://developer.android.com/training/articles/security-ssl