connecter le client Android socket.io via un serveur proxy inverse au serveur de socket

J’essaie de me connecter à un serveur socket.io fonctionnant derrière un proxy inverse Nginx. J’ai un serveur proxy Nginx exécuté avec https config https://api.xxx.com . Le serveur js socket.io est exécuté sur un autre serveur avec http config http://abcd:8081/app/v2 .

Du côté des Android, en tant que client socket, j’utilise l’ implementation 'com.github.nkzawa: socket.io-client:0.3.0 .

Le proxy est configuré comme ceci:

 location /app/v2 { proxy_cache apicache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_lock on; proxy_cache_bypass $http_cache_control; add_header X-Proxy-Cache $upstream_cache_status; proxy_cache_methods GET; proxy_cache_valid 200 302 2s; proxy_cache_valid 404 1m; proxy_pass http://abcd:8081/app/v2; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } 

Nœud js Server:

 socketio = socketio.listen(server); socketio.set('transports', ['websocket']); socketio.of('/app/v2/socketio/livefeed/').on('connection', function (socket) { console.log("device connected"); socket.emit('clientAction','connected'); socket.on('disconnect', function () { console.log("device disconnected"); socket.emit('clientAction','disconnected'); }); }); 

Tout en essayant de connecter l’application Android à socket comme ça

 `try { mSocket = IO.socket("https://api.xxx.com/app/v2/socketio/livefeed/"); } catch (URISyntaxException e) { Log.d(TAG, Ssortingng.valueOf(e)); } mSocket.connect();` 

Le client de socket ne se connecte pas au serveur socket.io. Comment dois-je connecter android socket client au serveur de socket derrière le serveur proxy?

L’URL que vous utilisez est le problème, car vous devrez peut-être le transmettre à votre proxy pour vos besoins de routage, veuillez essayer ce qui suit dans votre nginx conf. J’espère que cela t’aides.

 location ~ /app/v2/(?
.*) { proxy_cache apicache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_lock on; proxy_cache_bypass $http_cache_control; add_header X-Proxy-Cache $upstream_cache_status; proxy_cache_methods GET; proxy_cache_valid 200 302 2s; proxy_cache_valid 404 1m; proxy_pass http://abcd:8081/app/v2/$section; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }

J’ai rencontré un tel problème avec les sockets.

Dans mon cas, cela a été résolu en ajoutant ceci dans nginx.conf

 map $http_upgrade $connection_upgrade { default upgrade; '' close; }