개발모음집

socket.io 관련 코드들 본문

Server/node.js

socket.io 관련 코드들

void 2019. 12. 25. 10:00

서버에서 클라이언트로 채팅보내는 방법

io.sockets.in(room_id).emit('msgAlert',data);//자신포함 전체 룸안의 유저
socket.broadcast.to(room_id).emit('msgAlert',data); //자신 제외 룸안의 유저
socket.in(room_id).emit('msgAlert',data); //broadcast 동일하게 가능 자신 제외 룸안의 유저
io.of('namespace').in(room_id).emit('msgAlert', data) //of 지정된 name space의 유저의 룸

출처: https://opens.kr/63 [opens.kr]

 

클라이언트에서 서버와 연결중인지 확인하는 코드

socket = io('http://localhost:3000');

// socket이 연결되어있는지 확인하는 코드
if(socket.connect().connected) {
}

출처 : https://stackoverflow.com/questions/25263463/how-can-i-check-socket-io-connect-or-disconnect-on-android

 

How can I check socket.io connect or disconnect on android?

I connect to the node server with socketio.SocketIO running as a service.And, When Service restarts,opens socket.io without socket.io closure.That's a problem. A device making multiple socketIO

stackoverflow.com



- room안에서 어떤 유저가 있는지 확인하는 코드

io.of('/').in(roomName).clients((err, clients) => {
        // 배열의 userid와 socket id를 비교한다.
        console.log(clients) // an array of socket ids
    });

 

 

** 에러

- page reload하면, 소켓이 끊기지 않아 socketio 서버가 무한루프로 disconnection 동작을 했다.

disconnet 코드를 작성해주면 에러 해결

 socket.on('disconnect', function () {
                console.log('disconnect :' + socket.connected);

                socket.emit('disconnect', {
                    type: 'connection',
                    roomName: roomName,
                    name: 'chatNameInput.value'
                })
         });

 

 

// 안됨

let socket = io('http://localhost:3000');
sendBtn.onclick = (() => {
  socket.on('connect', function () {
	
  }
}


// 됨

let socket = io('http://localhost:3000');

socket.on('connect', function () {
	
}
sendBtn.onclick = (() => {
  
}

socket을 전역변수로 선언하고 소켓 연결을 클릭이벤트로 했을 때  위 connect 동작하지 않는다. 왜 그런지는 모르겠다. 그래서 클릭이벤트 밖에서 썼더니 사용가능해서 그냥 밖에서 사용했다.