我想從服務器發送消息到客戶端,在我的平均堆棧項目的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