我想从服务器发送消息到客户端,在我的平均堆栈项目的routes/index.js
中执行此操作。有谁知道如何socket.io
这里?:使用从服务器(Expressjs路由)发送消息到客户端
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)
})
})
但我无法想象如何写socket.emit
Expressjs路由里面......
编辑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");
});
你有一个用于你的http连接的会话对象吗?如果是这样,你可以在socket.io连接第一次连接时将'socket.id'放到会话中,然后你可以从任何http请求的session对象中获取socket.id并使用socket.id可以得到你可以通过socket.emit()打开的套接字。 – jfriend00
假设我可以将ID传递给http请求,我怎样才能从ID获取套接字? – SoftTimur
正如我以前问过的那样,您是否已经为http连接建立了快速会话?如果是这样,有一些模块可以帮助你在http和socket.io套接字之间进行互连。请回答关于您是否已建立会议的问题? – jfriend00