Simple peer и socket.io продолжает отправлять запросы туда и обратно 100 раз. Невозможно установить сигнальные соединения

Я пытаюсь установить соединение между двумя разными пользователями на сервере. Каждый раз, когда пользователь присоединяется к комнате, он получает информацию о socket.ids других пользователей в комнате. Что они пытаются сделать, так это то, что новый пользователь создает партнера-инициатора и отправляет сигнал. Что другой одноранговый узел принимает по какой-то причине, они оба продолжают отправлять друг другу назад и вперед запросы, и никто не обращается друг к другу с запросами, вот что происходит. Изображение внутренней консоли

createPeer = (userToSignal, callerId, stream) => {
    console.log('create peer called', userToSignal);
    const peer = new Peer({
        initiator: true,
        trickle: false,
        stream: stream
    })

    peer.on('signal', signal => {
        console.log('sending a signal to server')
        this.socket.emit('sending signal', {
            'userToSignal': userToSignal,
            'callerId': callerId,
            'signal': signal
        });
    });

    return peer;
}

addPeer = (incomingSignal, callerId, stream) => {
    console.log('Add peer called', callerId);
    const peer = new Peer({
        initiator: false,
        trickle: false,
        stream: stream
    });

    peer.signal(JSON.stringify(incomingSignal));

    peer.on('signal', signal =>{
        console.log('returning a signal to : ', callerId)
        this.socket.emit('returning signal', {
            'signal': signal,
            'callerId': callerId
        });
    });

    return peer;
}

joinCall = () => {
    navigator.mediaDevices.getUserMedia({ video: false, audio: true }).then(stream => {
        console.log(this.socket.id);
        this.socket.emit('join call', this.state.id, this.state.userName);
        console.log('Join Call Called')
        this.socket.on('all users', (usersInThisRoom) => {
            console.log('all users ', usersInThisRoom);
            const peers = [];
            usersInThisRoom.forEach(user => {
                console.log('for each called')
                const peer = this.createPeer(user['id'], this.socket.id, stream);
                peers.push({
                    'peerId' : user['id'],
                    'peer': peer 
                })
            });
            this.peersRefs = peers;
            this.setState({peersRefs : this.peersRefs});
        });

        this.socket.on('user joined', payload => {
            console.log('new user has joined', payload['callerId']);
            const peer = this.addPeer(payload['signal'], payload['callerId'], stream);
            this.peersRefs.push({
                'peerId': payload['callerId'],
                'peer': peer
            })
            this.setState({'peersRefs': this.peersRefs});
        });

        this.socket.on('receiving returned signal', payload => {
            console.log('returned signal recieved ', payload.id)
            const peerToSignal = this.peersRefs.find(peer => peer['peerId'] === payload.id)
            peerToSignal['peer'].signal(JSON.stringify(payload.signal));
        });
    });

    console.log('joining')     
}

Это мой код переднего плана ^^

// Changes start
socket.on('join call', (roomId, name) => {
    console.log('New User ', name)

    SessionModel.findById(roomId, (err, session, callback) => {
        if (err) throw err;
        let users = session.usersInCall;
        if (users.length === 10) {
            return;
        }
        let userObject = { 'id' : socket.id, 'name' : name};
        users.push(userObject);
        SessionModel.findOneAndUpdate({_id: roomId}, {usersInCall: users}, {
            new: true
        }, 
        (err) => {
            if (err) throw err
        });

        const usersInThisRoom = users.filter(user => {
            return user['id'] !== socket.id;
        });
        console.log(usersInThisRoom);
        socket.emit("all users", usersInThisRoom);

    })
})

socket.on('sending signal', payload => {
    console.log('Sending Signal',payload['userToSignal'] );

    io.to(payload['userToSignal']).emit('user joined', {
        'signal': payload['signal'],
        'callerId': payload['callerId']
    });
})

socket.on('returning signal', payload => {
    console.log('forwarding signal ',payload['callerId'])
    io.to(payload['callerId']).emit('receiving returned signal', {
        'signal' : payload['signal'],
        'id': socket.id
    });
})

Это мой код серверной части ^^^


person Aryaman Parekh    schedule 18.06.2020    source источник


Ответы (2)


Попробуйте поместить всех списков ur socketio внутрь useEffect

person Abdul Kàbéèr    schedule 11.10.2020

Похоже, вы создали бесконечный цикл. Из внутренних журналов пересылается сигнал ...... должен быть напечатан только один раз. Поскольку клиентский сокет дважды генерирует событие returning signal. Добавление журналов клиентской консоли помогло бы в отладке.

person raunaque patra    schedule 09.01.2021