socket.io работает на настольном компьютере, но не на мобильном (нет решения по аналогичным вопросам) - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь настроить веб-сокет с помощью socket.io для получения уведомлений с сервера.

Все отлично работает с настольного клиента. Даже проверено удаленным тестированием. Платная розетка всегда работает. Подтвержденный сокет иногда имеет проблемы.

На мобильном клиенте - конкретно IOS (не пробовал Andriod) ни один из сокетов не работает.

Кроме того, более общий вопрос об архитектуре socket.io:

Это приложение работает при получении оплаты биткойнами. Каждый раз, когда открывается веб-сайт, выполняется вызов API для получения нового адреса. Сеанс связан с этим адресом с помощью комнаты =, в этом случае на него ссылается 'id'. Затем все последующие сообщения, отправленные через сокет, фильтруются с использованием этого адреса => они в основном являются обновлениями платежей, произведенных по данному адресу.

thewebsite.com является произвольным. мы не используем localhost. это проверенный домен tls.

Любые другие предложения приветствуются и будут оценены.

У меня была точно такая же настройка, но с http-сервером и различными решениями я перешел на https - хотя nginx уже обрабатывал ssl.

СТОРОНА КЛИЕНТА JS

let socket = io();
socket.connect("https://thewebsite.com/");

socket.on('paid', function(msg){
    console.log(msg);
    const amount_paid = parseFloat(msg.message.amount);
    received(amount_paid);

});
socket.on('confirmed', function(msg){
    console.log(msg);
    const amount_paid = parseFloat(msg.message.amount);
    confirmed(amount_paid);

});
...
...
get_address()
.then((result)=>{
    address = result;
    socket.emit('id', {"address": address});
    console.log(address);
})
.catch((e)=>{
    console.log(e);
});
...
...
...

SERVER SIDE JS

const express = require('express');
const app = express();

const read = require('fs').readFileSync;


const credentials = {
  "key": read(`${process.env.SSL}thewebsite.key`, 'utf8'),
  "cert": read(`${process.env.SSL}thewebsite.crt`, 'utf8'),
  "ca": [
    read(`${process.env.SSL}tan_ca1.pem`, 'utf8'),
    read(`${process.env.SSL}tan_ca1.pem`, 'utf8'),
    read(`${process.env.SSL}tan_ca1.pem`, 'utf8')
  ]
};
const server = require('https').createServer(credentials, app);
const io = require('socket.io').listen(server);
...
...
...
app.post('/paid', (req,res)=>{
    try{
        //console.log(req.body.secret);
        let data = req.body;
        //the node will call this end point when new transaction is received
        if(data.secret === process.env.PIDGEY_SECRET){
            delete data.secret;
            console.log(data.address);

            io.to(`${data.address}`).emit('paid', {status:true, message: data});


            res.status(200).send({status: true, message:`pidgey knows about ${data.address}`});
        }
        else{
            res.status(400).send({status: false, message:"not my address"});

        }
    }
    catch(e){
        res.status(400).send({status: false, message:"error"});
        console.log(`Broke at the outskirts of btc_received.\n\nHere is the full error: ${e}`);
    }
});
...
...
...
io.sockets.on('connection',(socket) =>{
    console.log("Suser live.")
    socket.on('disconnect', function(){
        console.log('sUser disconnected.');
    });
    socket.on('id',function(msg){
        socket.join(msg.address);
        console.log(msg.address);
    });
})

NGINX

        server{
                listen                  443 ssl;
                server_name             thewebsite.com www.thewebsite.com;
                ssl                     on;
                gzip                    on;
                ssl_certificate         /etc/nginx/ssl/thewebsite_certchain.crt;
                ssl_certificate_key     /etc/nginx/ssl/thewebsite.key;

                location / {
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
                        proxy_set_header X-NginX-Proxy true;
                        proxy_redirect off;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";

                        proxy_redirect off;
                        proxy_set_header   X-Forwarded-Proto $scheme;
                        proxy_pass      https://localhost:3000/;

                }


        }

Ожидается получение обновлений на IOS. Ничего не получить. Нет обновления при использовании chrome: //inspect.

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