Я разработал игру на реагировать нативно для android и ios . Он подключается через сокеты к серверу nginx , который работает с сертификатом SSL Digi Cert. За nginx работают 4 node.js сервера
3000, 3001, 3002, 3017 портов соответственно. Вся архитектура находится внутри экземпляра AWS EC2 c5.x. Все входящие и исходящие порты брандмауэра AWS открыты для целей тестирования.
Я могу прослушивать соответствующие порты из браузера моего ноутбука, и он дает правильные ответы. Мобильное приложение, с другой стороны, общается только через сокеты.
Некоторые устройства не могут подключиться к серверу (событие «подключения» сокета не прослушивается и отображается ошибка подключения к веб-сокету), в то время как другие могут подключаться без усилий.
Отображается следующая ошибка:
Error: websocket error
at WS.Transport.onError (/home/ubuntu/TTP-Server/node_modules/engine.io-client/lib/transport.js:64:13)
at WebSocket.ws.onerror (/home/ubuntu/TTP-Server/node_modules/engine.io-client/lib/transports/websocket.js:150:10)
at WebSocket.onError (/home/ubuntu/TTP-Server/node_modules/engine.io-client/node_modules/ws/lib/EventTarget.js:109:16)
at emitOne (events.js:116:13)
at WebSocket.emit (events.js:211:7)
at WebSocket.finalize (/home/ubuntu/TTP-Server/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js:182:41)
at ClientRequest._req.on (/home/ubuntu/TTP-Server/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js:647:10)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at Socket.socketErrorListener (_http_client.js:387:9)
Все устройства выше android 6 и ios 10 версии
Я проверил свой веб-сайт на наличие онлайн-валидатора SSL. Показывает следующие результаты:
![enter image description here](https://i.stack.imgur.com/QE5UV.png)
Вот мои связанные файлы и коды:
nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events
{
worker_connections 768;
}
http
{
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl on;
ssl_certificate PATH_TO_CRT_FILE;
ssl_certificate_key PATH_TO_KEY_FILE;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
upstream lobby
{
server 127.0.0.1:3000;
}
upstream table_1
{
server 127.0.0.1:3001;
}
upstream table_2
{
server 127.0.0.1:3002;
}
upstream analytics
{
server 127.0.0.1:3017;
}
server
{
listen 443;
server_name tpa;
location /3000/
{
proxy_pass http://lobby/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /3001/
{
proxy_pass http://table_1/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /3002/
{
proxy_pass http://table_2/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /3017/
{
proxy_pass http://analytics/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
Внутри моего собственного исходного кода я использовал узел Socket.IO , и я устанавливаю соединение, используя следующий код:
let options = {
transports: ["websocket"],
query: `userID=${this.props.phoneNumber}&ipAddress=${ip}&sessionId=${uuid}`,
reconnection: true,
reconnectionAttempts: Infinity,
path: "/3000/socket.io"
};
socket = io(`${Constants.serverIP}`, options);
Это дало мне бессонную ночь с последних 2 дней. Пожалуйста помоги. Спасибо.