가장 단순하고 가장 우아한 솔루션
다음과 같이 쉽습니다.
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
이벤트를 수신 하여 맵에서 제거합니다.
매초마다 타이머가 시작됩니다. 이 경우 서버는 맵을 탐색하여 현재 시퀀스 번호를 가진 모든 클라이언트에 메시지를 보냅니다. 그런 다음 증가시키고 맵에 다시 번호를 저장합니다. 그게 전부입니다. 쉬워요.
고객
클라이언트 부분이 더 간단합니다. 서버에 연결하고 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
나는 또한 여기에 전체 코드로 요점을 준비했습니다 .