티스토리 뷰

socket.id는 서버측에서만 사용 가능

클라이언트 = writer1, writer2, writer3 ...
관리자 = admin
라고 가정하고
admin 이 writer1 에게만 메세지 전송한다는 시나리오.

서버측

var io = require('socket.io').listen(8001);
var clients = [];

io.sockets.on('connection', function (socket) {
    socket.on('login', function(data) {
		var clientInfo = new Object();
		clientInfo.uid = data.uid;
		clientInfo.id = socket.id;
		clients.push(clientInfo);
	});
	
	socket.on('message special user', function(data) {
	// 클라이언트 소켓 아이디를 통해서 그 소켓을 가진 클라이언트에만 메세지를 전송
    for (var i=0; i < clients.length; i++) {
        var client = clients[i];
		console.log('client.uid = '+ client.uid);
		if (client.uid == data.uid) {
                                io.sockets.socket(client.id).send(data.msg);
				break;
			}
		}
	});
	
	socket.on('disconnect', function() {
		for (var i=0; i < clients.length; i++) {
			var client = clients[i];
			if (client.id == socket.id) {
				clients.splice(i, 1);
				break;
			}
		}
		console.log('user disconnected');
	});
});

유저 writer1

var socket = io.connect('http://xxx.com', { port:8001 });

socket.on('connect', function() {
    socket.emit('login', { uid: 'writer1' });
});

// 서버측에서 socket.send(msg); 한것을 받아 살행
socket.on('message', function (msg) {
    document.write(msg);
});

관리자 admin

var socket = io.connect('http://xxx.com', { port:8001 });

socket.on('connect', function() {
    socket.emit('login', { uid: 'admin' });
});

socket.on('message', function (msg) {
    document.write(msg);
});

// 글쓴이1에게만 메세지 전송. 브라우저 콘솔에서 원할때 찍는게 나을듯...
socket.emit('message special user', { uid:'writer1', msg:'글쓴이1 에게만 보내는 메시지입니다.' });
댓글