android - Android:socket.io io.socket.engineio.client.EngineIOException:XHR 轮询错误
问题描述
有时我会收到此错误:
io.socket.engineio.client.EngineIOException:xhr 轮询错误
我连接到套接字的代码:
try {
HostnameVerifier myHostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}};
SSLContext mySSLContext = null;
try {
mySSLContext = SSLContext.getInstance("TLS");
try {
mySSLContext.init(null, trustAllCerts, null);
} catch (KeyManagementException e) {
e.printStackTrace();
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
OkHttpClient okHttpClient = new OkHttpClient.Builder().hostnameVerifier(myHostnameVerifier).sslSocketFactory(mySSLContext.getSocketFactory()).build();
IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
IO.setDefaultOkHttpCallFactory(okHttpClient);
IO.Options opts = new IO.Options();
opts.callFactory = okHttpClient;
opts.webSocketFactory = okHttpClient;
G.socket = IO.socket(G.SOCKET_ADDRESS, opts);
G.socket.connect();
} catch (URISyntaxException e) {
Log.i("errorCheck", "E: "+e);
e.printStackTrace();
}
但有时它工作得很好。在其他时候,它不会。
我使用HTTPS
,但它不适用于 443 端口。
我从用户那里获得所有权限,有时socket.io
工作正常。
我如何修复它以使其始终正常工作?
解决方案
最后,我将传输从 更改polling
为websocket
并修复了我的问题(客户端和服务器端)
安卓 :
IO.Options opts = new IO.Options();
opts.transports = new String[] { WebSocket.NAME };
socket = IO.socket(SOCKET_ADDRESS, opts);
socket.connect();
服务器 :
io.set('transports', ['websocket']);
推荐阅读
- ruby-on-rails - Ruby 自定义方法链
- python - 将两个 DF 与一个与 PANDAS 有点相似的列合并
- ios - Module RCTLog 不是注册的可调用模块,Module AppRegistry 不是注册的可调用模块,Module RCTDeviceEventEmitter 不是
- python - 将特定行移动到熊猫数据框顶部或底部的功能
- c# - 解析 DryIoc DI-Container 中的命名服务
- python - 比“for”更快的方法来扫描 DataFrame - Python
- reactjs - 将表单输入的值传递给函数 onSubmit
- google-apps-script - 使用应用程序脚本从谷歌表格中删除电子邮件时如何从谷歌联系人中删除联系信息
- vuejs3 - Vue 3 在单独的文件中重用组合 API
- php - 按月显示总值