Socket.io,Node,Corodva,我没有在客户端接收中回复消息

时间:2018-05-27 20:54:38

标签: node.js cordova socket.io

当我尝试使用" emit"从客户端emisor发送消息时,我遇到了问题。我尝试用" on"来捕捉消息。在客户受体中。

我不知道问题是什么,我的代码就是这样:

Emisor客户:

socket.emit("callDriver", data);

Receptor Client:

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 :(得分:1)

伙计们我解决了这个问题,在Socket.io的官方文档中很奇怪他们说当你在.emit中发送数据时你应该用" socket.emit()&#发送它34; (服务器端)但我尝试更换套接字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);

    })

})




谢谢你们!

答案 1 :(得分:0)

这是一个简单的房间解决方案。 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)
    })
})