Socket.io, Node, Corodva, я не получаю сообщение в клиентском рецепторе - PullRequest
0 голосов
/ 27 мая 2018

У меня проблема, когда я пытаюсь отправить сообщение от клиента emisor с помощью «emit», и я пытаюсь поймать сообщение с «on» в клиентском приемнике.

Я не знаю, в чем проблемамой код такой:

Клиент Emisor:

socket.emit("callDriver", data);

Клиент-рецептор:

socket.on("sendToDriver", function(data){

    console.log(data);

})

Сервер:

var io = require('socket.io')(server);

io.on('connection', function(socket){

    socket.on('callDriver', function(data){

        console.log(data);

        socket.emit('sendToDriver', data);

    })

})

Спасибо сообществу

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Ребята, я решил проблему, странно в официальной документации Socket.io, они говорят, что когда вы отправляете данные в .emit, вы должны отправить это с помощью "socket.emit ()" (на стороне сервера), но я пытаюсь изменитьсокет для io и с этим режимом работай.

В заключение:

// I changed this:
io.on('connection', function(socket){

    socket.on('callDriver', function(data){

        console.log(data);

        socket.emit('sendToDriver', data);

    })

})

// for this:
io.on('connection', function(socket){

    socket.on('callDriver', function(data){

        console.log(data);

        io.emit('sendToDriver', data);

    })

})

Спасибо, ребята!

0 голосов
/ 28 мая 2018

Вот простое решение для комнаты.Часть init () очень проста в использовании, но вы не сказали, как намереваетесь заполнить сервер сокетов с помощью userId / session-data клиента при первом подключении к серверу.

//Client
socket.on('connect',()=>{
 socket.on('init',()=>{
  socket.emit('init', 'userid')
 })
})
socket.on("sendToDriver", function(message){
  console.log(message);
})

sendMessage(message){
let data = {userId: "userId", message: message}
socket.emit("callDriver", data);
}

//Server
var io = require('socket.io')(server);
//Triggered by each client separately.
io.on('connection', function(socket){
    socket.on('init', (driverId)=>{
        //When your web socket starts for the first time, each user creates their own room with their main userId that is used in your mobile app.
        //Your setup is so basic, that the server('connection') -> server.emit('init') -> client.on('init') -> client.emit('init') flow is the most sane example for now.
        //However this init() setup is primitive -- you need an authentication flow and to pass up the userId/session data with a socket.io 'middleware' function or the 'socket.io-auth' library (recommended)
        socket.join(driverId)
    })
    socket.emit('init')
    //Data sent to callDriver will contain the userId of the desired receipient. Since this user is already waiting in that room for us, we join it, 
    //send the message, and then leave immediately. 
    socket.on('callDriver', function(data){
        socket.join(data.driverIdToCall)
        socket.to(data.driverIdToCall).emit('sendToDriver', data.message);
        socket.leave(data.driverIdToCall)
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...