подключите Socket.io Android-клиент через обратный прокси-сервер к сокету - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь подключиться к серверу socket.io, работающему за обратным прокси-сервером Nginx. У меня прокси-сервер Nginx, работающий с https config https://api.xxx.com. Узел js socket.io server работает на другом сервере с http config http://a.b.c.d:8081/app/v2.

На стороне андроида в качестве сокет-клиента я использую implementation 'com.github.nkzawa: socket.io-client:0.3.0.

Прокси настроен так:

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://a.b.c.d: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;

    }

Узел js Сервер:

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

При попытке подключить приложение Android к сокету, как это

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

Клиент сокета не подключается к серверу socket.io. Как подключить Android-клиент для сокетов к серверу сокетов за прокси-сервером?

Ответы [ 2 ]

0 голосов
/ 13 июля 2018

Я сталкивался с такой проблемой с сокетами.

В моем случае это было решено добавлением этого в nginx.conf

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
0 голосов
/ 12 июля 2018

URL-адрес, который вы используете, является проблемой, так как вам может понадобиться передать его прокси-серверу в любом случае для целей маршрутизации, пожалуйста, попробуйте следующее в вашей конфигурации nginx.Надеюсь, это поможет.

location ~ /app/v2/(?<section>.*) {

        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://a.b.c.d: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;



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...