ทางออกที่ง่ายที่สุดและสง่างามที่สุด
ง่ายเหมือน:
client.emit("your message");
และนั่นคือมัน
แต่อย่างไร ยกตัวอย่างให้ฉัน
สิ่งที่เราทุกคนต้องการคือตัวอย่างจริงทั้งหมดและนั่นคือสิ่งที่ตามมา นี่คือการทดสอบกับ socket.io รุ่นล่าสุด (2.0.3) และยังใช้ Javascript ที่ทันสมัย (ซึ่งเราควรใช้ทั้งหมดในตอนนี้)
ตัวอย่างประกอบด้วยสองส่วน: เซิร์ฟเวอร์และไคลเอนต์ เมื่อใดก็ตามที่ลูกค้าเชื่อมต่อลูกค้าจะเริ่มรับหมายเลขลำดับเป็นระยะจากเซิร์ฟเวอร์ ลำดับใหม่เริ่มขึ้นสำหรับไคลเอนต์ใหม่แต่ละรายดังนั้นเซิร์ฟเวอร์จะต้องติดตามพวกเขาแยกกัน นั่นคือสิ่งที่"ฉันต้องส่งข้อความไปยังลูกค้าเฉพาะ"เข้ามาเล่น รหัสง่ายมากที่จะเข้าใจ เรามาดูกัน
เซิร์ฟเวอร์
server.js
const
io = require("socket.io"),
server = io.listen(8000);
let
sequenceNumberByClient = new Map();
// event fired every time a new client connects:
server.on("connection", (socket) => {
console.info(`Client connected [id=${socket.id}]`);
// initialize this client's sequence number
sequenceNumberByClient.set(socket, 1);
// when socket disconnects, remove it from the list:
socket.on("disconnect", () => {
sequenceNumberByClient.delete(socket);
console.info(`Client gone [id=${socket.id}]`);
});
});
// sends each client its current sequence number
setInterval(() => {
for (const [client, sequenceNumber] of sequenceNumberByClient.entries()) {
client.emit("seq-num", sequenceNumber);
sequenceNumberByClient.set(client, sequenceNumber + 1);
}
}, 1000);
เซิร์ฟเวอร์เริ่มฟังบนพอร์ต 8000 สำหรับการเชื่อมต่อขาเข้า เมื่อมีคนมาถึงก็จะเพิ่มลูกค้าใหม่ลงในแผนที่เพื่อให้สามารถติดตามหมายเลขลำดับของมันได้ นอกจากนี้ยังฟังdisconnect
เหตุการณ์ของลูกค้าเมื่อมันจะลบออกจากแผนที่
ทุก ๆ วินาทีจะจับเวลาออก เมื่อใดก็ตามที่เซิร์ฟเวอร์เดินผ่านแผนที่และส่งข้อความไปยังลูกค้าทุกคนที่มีหมายเลขลำดับปัจจุบัน จากนั้นจะเพิ่มขึ้นและเก็บหมายเลขไว้ในแผนที่ นั่นคือทั้งหมดที่เป็นไปได้ peasy ง่าย ๆ
ไคลเอนต์
ส่วนลูกค้านั้นเรียบง่ายขึ้น เพียงเชื่อมต่อกับเซิร์ฟเวอร์และฟังseq-num
ข้อความพิมพ์ไปยังคอนโซลทุกครั้งที่มาถึง
client.js
const
io = require("socket.io-client"),
ioClient = io.connect("http://localhost:8000");
ioClient.on("seq-num", (msg) => console.info(msg));
ใช้ตัวอย่าง
ติดตั้งไลบรารีที่ต้องการ:
npm install socket.io
npm install socket.io-client
เรียกใช้เซิร์ฟเวอร์:
node server
เปิดหน้าต่างเทอร์มินัลอื่นและวางไข่ไคลเอ็นต์ได้มากเท่าที่คุณต้องการด้วยการเรียกใช้:
node client
ฉันยังได้เตรียมสรุปสาระสำคัญที่มีโค้ดเต็มรูปแบบที่นี่