【问题标题】:how can i emit data to other client (user) using socket.io?如何使用 socket.io 向其他客户端(用户)发送数据?
【发布时间】:2019-10-23 19:15:00
【问题描述】:

我正在向所有客户端发送数据,但它只附加在发件人的消息正文上。在这种情况下,实时数据仅适用于发件人,但我需要处理每个连接的用户。

在阅读了它说的文档后,BROADCASTING 可能是解决方案,但它没有显示给发送者(这意味着好的)但也没有显示其他连接的接收者。

自定义.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 ..");
});
});

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

【问题讨论】:

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


    【解决方案1】:

    如果你想向所有连接的套接字发送消息,你可以使用

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

    如果你想将消息发送到除发件人之外的所有连接的套接字,请使用

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

    【讨论】:

    • 不工作。顺便说一句,我编辑了几行代码。我希望它可能会有所帮助。
    • 你在写socket.on('send', data => console.log(data)时看到data吗?在客户端和服务器端?
    • 是的。我在两边都看到了。但它只显示在发件人的控制台中。
    • 你的socket io客户端和服务器版本是什么?我使用了客户端 2.0.3 和服务器 2.1.1,只用 io.sockets.emit('msgResult', data.msg); 替换了你的 socket.emit('msgResult', data.msg);,它工作得很好
    【解决方案2】:

    你的 socket 服务器的 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 });
    }
    

    【讨论】:

    • 我了解您的解决方案。但这不是我想要的。我通过其他路由文件提交的消息完全可以,并且我可以通过应用程序获取数据。使用socket.js文件。但为什么它只适用于发件人?它应该适用于所有连接的接收器。
    • 嘿兄弟,你能告诉我如何在你的 event.js 部分中获得 BROADCAST 吗?
    • 这是不可能的,因为广播事件触发并将传递给所有连接的套接字,只排除触发事件的人,即发送者
    【解决方案3】:

    我有一个 api,用于通过创建和传递这个 api 将我的管理员通知广播给我下面的所有代理

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

    【讨论】:

      【解决方案4】:

      我终于找到了答案。这是一个简单的错误,需要很长时间。

      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。就是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多