我如何使用socket.io向其他客户端(用户)发送数据?

时间:2019-06-08 17:17:11

标签: node.js mongodb express mongoose socket.io

我正在向所有客户端发送数据,但它仅附加在发件人的邮件正文上。在这种情况下,实时数据仅在发送者上起作用,但是我需要在每个连接的用户上起作用。

阅读说明文件后,广播可能是解决方案,但对发送方不显示(这意味着可以),但对于其他连接的接收方也未显示。

  
    

Custom.js

  
var socket = io.connect("http://localhost:3000/");
    $.ajax({
     url: 'sent',
     type: 'POST',
     data: {
      msg: 'Some message'
     },
     dataType: "json",
     success: function (data) {
      if (data.message) {
        socket.emit('send', {
         msg: data.msgResult
        });
        socket.on('msgResult', result => {
         $(".msgDiv").append(result);
        });
      }
     }
    });
  
    

App.js

  
const app = express();
const http = require("http").Server(app);
const io = require("socket.io")(http);

io.on('connection', (socket) => {
console.log('Socket.io connected...');
socket.on('send', (data) => {
socket.emit('msgResult', data.msg);
});
socket.on('disconnect', () => {
console.log("A socket Discounted ..");
});
});

我也想将数据附加到包括发件人在内的所有已连接用户上。

4 个答案:

答案 0 :(得分:0)

如果要将消息发送到所有已连接的套接字,则可以使用

io.sockets.emit('msgResult', 'data');

,如果要将消息发送到除发件人以外的所有已连接套接字,请使用

socket.broadcast.emit('msgResult', 'data');

答案 1 :(得分:0)

您用于套接字服务器的index.js应该具有 // webServerPort = localhost:3000

const server = http.createServer(app);
let constAppServer = server.listen(webServerPort);
let io = socketServer(constAppServer);
app.set('socket',io);
io.on('connection', function (socket) {
    console.log('connection opened');

    socket.on('disconnect', function(){
        console.log('user disconnected');
    });

    socket.on('udagent',function(msg){
        console.log('message: ' + msg);
    });
});

当您要将事件发送到前端时,这就是您的event.js

const testFunction =(req,res)=> {
    let io = req.app.get('socket');
    io.emit('dashboard_event', { "totalMin": data });
}

答案 2 :(得分:0)

我有一个api通过创建并传递此api来向我下面的所有代理广播我的管理员通知

const broadCastUpdates =(req,res)=> {
    const {message} = req.body
    let io = req.app.get('socket');
    io.broadcast.emit('broadCastToAgents', { 'data':message });
}

答案 3 :(得分:0)

最后我找到了答案。这是一个简单的错误,需要很多时间。

  

custom.js

var socket = io.connect("http://localhost:3000/");
$.ajax({
     url: 'sent',
     type: 'POST',
     data: {
      msg: 'Some message'
     },
     dataType: "json",
     success: function (data) {
      if (data.message) {
        socket.emit('send', {
         msg: data.msgResult
        });
      }
    }
});

socket.on('msgResult', result => {
$(".msgDiv").append(result);
});
  

App.js

const app = express();
const http = require("http").Server(app);
const io = require("socket.io")(http);

io.on('connection', (socket) => {
console.log('Socket.io connected...');
socket.on('send', (data) => {
socket.emit('msgResult', data.msg);
});
socket.on('disconnect', () => {
console.log("A socket Discounted ..");
});
});

我只是从ajax提交中插入了 msgResult 。就是这样。