【问题标题】:Sending Object to group of users Node.js by using Socket.IO使用 Socket.IO 向用户组 Node.js 发送对象
【发布时间】:2020-12-18 21:46:25
【问题描述】:

我将 Node.js 与 Express.js 一起使用,而对于实时数据,我使用的是 socket.io。

我正在尝试在预订应用上创建。

因此,当用户通过 REST api 请求时,服务器将通过 mongoose 将信息存储到 mongoDB,然后将相同的数据发送给其他用户。

我将路由器用于不同的路径。下面是我的 server.js

var express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const routes = require('./routes/routes');
const port = process.env.PORT || 8080;
app.use(express.json());
app.use(cors())
app.use(express.urlencoded({ extended: false }));
app.set('socketio', io);
app.use(routes);


mongoose.Promise = global.Promise;

mongoose.connect(
    'mongodb://localhost:27017/myapp', 
    { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }
    ).then(() => {
        console.log('db connected');
    }).catch(err => {
        console.log(err,"hello 1998");
    });

server.listen(8080);

下面是我的路线

const { Router } = require('express');
var router = Router();
const { main } = require('../helper/db_main')
const { checkAuthentication } = require('../helper/auth')

router.use('/api/v1/services',main,checkAuthentication,require('../controllers/services'));
router.use('/api/v1/category',main,checkAuthentication,require('../controllers/category'));
router.use('/api/v1/socket',main,checkAuthentication,require('../controllers/socket'));


module.exports = router; 

下面是我尝试向特定用户发送/发送数据的地方,但它在客户端不起作用,即无法在前端看到发送消息。

const list_all_category = (req,res) => {
    console.log("Hjdnckjsdck")
    var io = req.app.get('socketio');
    // global.io.to("notify_me").emit("message", "hello ftomr");
    let result_data 
    category.list_all_category().then(save_res => {
        if (save_res)
            result_data =  res.status(200).send(save_res)
        else{
            result = 'fail'
            res.send()
        }
    })

    console.log("Here is ninja",io.id)
    io.on('connection', function(socket){
        console.log(socket.id); // same respective alphanumeric id...
     })
    io.sockets.on('connect', function(socket) {
        const sessionID = socket.id;
        
        
    })
    io.on('notify',function(){
        console.log("Galgotia")
    })
    io.sockets.emit('chat_message', 'world');
   
}

【问题讨论】:

  • “它不工作” - 什么是错误/问题?
  • 基本上我没有在客户端收到通知。
  • 我不确定您是否在 list_all_category 中正确导入 socket.io var io = req.app.get('socketio');勾选stackoverflow.com/questions/38511976/…在其他文件中导入socket.io。
  • 谢谢,我会试试这个。
  • 谢谢@Rupjyoti。我从下面的帖子中得到了答案。 stackoverflow.com/a/37560779/9383409

标签: node.js express socket.io


【解决方案1】:

利用这个

socket.broadcast.to('ID').emit('send msg', {somedata : somedata_server} ); 您可以使用 ${Socket.id}

为特定用户设置每个套接字 ID

如果您要发送任何内容,请始终将用户的 socket.id 发送到客户端并将它们发送回服务器。

【讨论】:

猜你喜欢
  • 2018-08-12
  • 1970-01-01
  • 2011-06-06
  • 2013-10-26
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多