通过反向代理服务器将socket.io android客户端连接到socket服务器
我正在尝试连接到运行在Nginx反向代理后面的socket.io服务器。我的Nginx代理服务器运行https配置通过反向代理服务器将socket.io android客户端连接到socket服务器,android,node.js,sockets,nginx,socket.io,Android,Node.js,Sockets,Nginx,Socket.io,我正在尝试连接到运行在Nginx反向代理后面的socket.io服务器。我的Nginx代理服务器运行https配置https://api.xxx.com。节点js socket.io服务器正在另一台服务器上运行,并使用http confighttp://a.b.c.d:8081/app/v2 在android端作为套接字客户端,我使用的是实现'com.github.nkzawa:socket.io客户端:0.3.0 代理服务器的配置如下: location /app/v2 {
https://api.xxx.com
。节点js socket.io服务器正在另一台服务器上运行,并使用http confighttp://a.b.c.d:8081/app/v2
在android端作为套接字客户端,我使用的是实现'com.github.nkzawa:socket.io客户端: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 socket client连接到代理服务器后面的socket server?问题在于您使用的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;
}
location~/app/v2/(?*){
代理缓存;
代理\u缓存\u在上重新验证;
代理缓存使用2;
代理\u缓存\u使用\u过时错误超时更新http\u 500 http\u 502
http_503 http_504;
代理缓存锁定;
代理缓存绕过$http缓存控制;
添加_头X-Proxy-Cache$上游_缓存_状态;
代理缓存方法获取;
代理缓存有效2003022s;
代理缓存有效4041M;
代理通行证http://a.b.c.d:8081/app/v2/$科;
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理集头连接“升级”;
代理设置头主机$Host;
代理缓存绕过$http\u升级;
}
我在套接字方面遇到过这样的问题
在我的例子中,通过在nginx.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
如果您直接连接到
http://a.b.c.d:8081/app/v2
,它能工作吗?是的,直接连接到url就可以完美地工作。我还添加了服务器套接字代码@tarunlalwani,你能把location/app/v2{
改为location/app/v2/socketio{
并在proxy\u pass中附加相同的代码,看看它是否有效吗?我认为url不是问题,因为在同一服务器()上运行的代理背后的其他api工作得很好