通过反向代理服务器将socket.io android客户端连接到套接字服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过反向代理服务器将socket.io android客户端连接到套接字服务器相关的知识,希望对你有一定的参考价值。

我正在尝试连接到在nginx反向代理后面运行的socket.io服务器。我有运行https config https://api.xxx.com的Nginx代理服务器。节点js socket.io服务器在另一台服务器上使用http config http://a.b.c.d:8081/app/v2运行。

android端作为套接字客户端,我正在使用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套接字客户端连接到代理服务器后面的套接字服务器?

答案

您正在使用的网址是问题所在,因为您可能需要将其传递给代理以用于路由目的,请在您的nginx conf中尝试以下操作。希望这可以帮助。

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;



}
另一答案

我遇到了套接字这样的问题。

就我而言,它是通过在nginx.conf中添加它来解决的

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

以上是关于通过反向代理服务器将socket.io android客户端连接到套接字服务器的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io无法在Node.js前面使用Nginx反向代理

如何将 Apache 配置为代理 socket.io 服务器

socket.io 的快速代理

nginx 和 socket.io 解决方法

带有 nginx 负载平衡器问题的 Socket.IO 集群

使用带有 Socket.io IOS 客户端的客户端证书