[node] socket.io 사용법 메모

김택주·2023년 2월 15일

Node

목록 보기
5/7

출처: https://bcho.tistory.com/899

io.sockets, socket


io.sockets

전체 연결된 소켓 클라이언트 객체

socket

개별 소켓 클라이언트 객체

io.sockets.on('connection', function (socket) {
	io.sockets : 전체 연결된 소켓 클라이언트 객체
    socket : 개별 소켓 클라이언트 객체
});

이벤트 보내기 받기


이벤트 보내기

socket.emit('test', {test: 'aaa'});

현재 연결된 클라이언트 소켓으로 이벤트를 보냄

이벤트 받기

socket.on('test', function (data) {
	console.log('data: ', data);
})

현재 연결된 클라이언트 소켓으로 이벤트 받음

이벤트 받을때 데이터 값 data 로 받음

이벤트 전체 보내기


나 빼고 전체 보내기

socket.broadcast.emit('test', {test: 'aaa'});

나 포함 전체 보내기

io.sockets.emit('test', {test: 'aaa'});

io.sockets 는 전체 연결된 소켓 클라이언트 이므로 전체 소켓에 이벤트 전달

특정 소켓에게 이벤트 보내기


io.sockets("소켓아이디").emit("test", {test: "aaa"});

소켓아이디 값은 각 소켓에 있는 id 속성값 socket.id 각 소켓들을 구별해주는 식별자

소켓에 데이터 set/get/del

socket.set("test", {test: "aaa"}, callback?);
socket.get("test", callback?);
socket.del("test", callback?);

socket 도 객체이기 때문에 socket.test = {test: "aaa"} 로 저장해도 되지만
set/get/del 내부도 Object.property 를 사용하며

socketstoreredis 로 하게 될경우 에는 데이터를 Object 내부에 저장하는게 아니기 때문에 Object.property 로는 가져올수 없지만 set/get/del 를 사용하면 가능하기 때문에 사용

다른 클러스터 노드에서도 set/get/del를 사용하면 접근 가능

room


채팅방 처럼 room 을 만들어 room 안에 있는 소켓들만 이벤트를 주거나 받을수있음

socket.join("roomName"); // 룸 참여
socket.leave("roomName"); // 룸 나가기

room에 참여해있는 나빼고 모든 소켓들에게 이벤트 전송

socket.broadcast.to("roomName").emit("test", {test: "aaa"});

room에 참여해있는 모든 소켓들에게 이벤트 전송

io.sockets.in("roomName").emit("test", {test: "aaa"});

현재 생성된 room 목록 조회

io.sockets.manager.rooms

room에 참여한 소켓 목록 조회

io.sockets.clients("roomName")

0개의 댓글