解決http協議只能由client端發起, server端和client端可以雙向發出訊息
socket安裝→ server
$ npm install -d socket.io
// app.js
mongoose
.connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then((result) => {
const server = app.listen(3000, () => {
console.log("App listening on port 3000!");
});
// socket
const io = require("socket.io")(server);
io.on("connection", (socket) => {
socket.on("send-to-all-client-message", (data) => {
// 發送消息給client端
socket.emit('server-to-client-message', data)
});
});
})
.catch((err) => console.log("mongoose連結異常", err));
socket安裝 → client
https://socket.io/docs/v4/client-installation/#from-npm
$ npm install socket.io-client
// 初始化 package.json
$ npm init -y
// 啟用lite-server
$ npm install -d lite-server
// pakage.json
"scripts": {
"start": "lite-server",
},
// index.html
const socket = io("<http://localhost:3000/>", { transports: ["websocket"] })
const sendToAllClient = () => {
socket.emit("send-to-all-client-message", `現在時間:${new Date()}`)
}
// 接收server訊息
socket.on("server-to-client-message", data => {
console.log('接收socket後端訊息', data)
})