[英]How to send WebSocketSubject messages only from client to server?
[英]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.