簡體   English   中英

從服務器發送消息(Expressjs路由)到客戶端

[英]Send messages from server (Expressjs routing) to client

我想從服務器向客戶端發送消息,並我的平均堆棧項目的routes/index.js實現 有誰知道如何在這里使用socket.io

router.post('/message/sendMessage', function (req, res, next) {
    console.log("router.post /message/sendMessage " + req.body)
    // send req.body to client
});

PS:以前,我曾在項目中使用過socket.io一次:客戶端打開一個套接字,然后服務器發出一條名為id的消息,客戶端接收到它。 在客戶端中:

socket = io.connect();
socket.on('id', function (id) { ... })

www (服務器)中:

io.sockets.on('connection', function (socket) {
  console.log("LOG: just connected: " + socket.id);
  socket.emit('id', socket.id);
  socket.on('disconnect', function () {
    console.log("LOG: just disconnected: " + socket.id)
  })
})

但是我無法想象如何在Expressjs路由中編寫socket.emit ...

編輯1:我嘗試執行以下操作以向所有客戶端發送消息,但是在控制台中,該消息僅顯示到before emit ,並且在客戶端中顯示“ Failed to load resource: the server responded with a status of 500 (Internal Server Error)

router.post('/message/sendMessage', function (req, res, next) {
    console.log("router.post /message/sendMessage");
    console.log("before emit");
    io.sockets.on('connection', function (socket) {
        console.log("LOG: just connected: " + socket.id);
        io.emit("message", "this is a test");
        socket.on('disconnect', function () {
            console.log("LOG: just disconnected: " + socket.id)
        })
    })
    console.log("after emit");
});

實際上,我的問題歸結為一個常見問題:如何在快速路由文件中使用socket.io。

而且我找到了一個超級答案: https : //stackoverflow.com/a/31277123/702977

所以在www

var io = require('socket.io').listen(server);
app.set('socketio', io);

並在index.js

router.post('/message/sendMessage', function (req, res, next) {
    console.log("router.post /message/sendMessage");
    var io = req.app.get('socketio');
    io.emit("message", "hi!");
    res.json("hahaha")
});

如果我想向某個客戶端發送消息,則需要將id等信息作為參數傳遞給router.post,然后使用io.to(req.body.id).emit("message", req.body.message);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM