On Android socket client
Error:
io.socket.engineio.client.EngineIOException: xhr poll error
cause: java.net.SocketTimeoutException: timeout
=> By pass ssl, https, addition write timeout to http client
public static Socket initialSocket (String token) {
try {
if (socket == null) {
HostnameVerifier myHostnameVerifier = (hostname, session) -> true;
SSLContext mySSLContext = SSLContext.getInstance("TLS");
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
public void checkClientTrusted(X509Certificate[] chain,
String authType) {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) {
}
}};
mySSLContext.init(null, trustAllCerts, new java.security.SecureRandom());
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(5, TimeUnit.MINUTES) // connect timeout
.writeTimeout(5, TimeUnit.MINUTES) // write timeout
.readTimeout(5, TimeUnit.MINUTES)// read timeout
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.hostnameVerifier(myHostnameVerifier)
.sslSocketFactory(mySSLContext.getSocketFactory(), new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
});
OkHttpClient okHttpClient = clientBuilder.build();
IO.setDefaultOkHttpCallFactory(okHttpClient);
IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.callFactory = okHttpClient;
opts.webSocketFactory = okHttpClient;
opts.query = "token=" + token;
socket = IO.socket(ApiUrls.SOCKET_URL, opts);
}
return socket;
} catch (URISyntaxException e) {
throw new RuntimeException(e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
socket = null;
return null;
}
Check config proxy pass header on Nginx server
/etc/nginx/sites-available/mysite
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";
}
}