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; }