I'm writing a social web with NodeJS, Express and Angular.
Now I already handled socket between server and client but I want to send a server side status of a user to only his friends, not broadcast to the whole network.
This is my code:
In client
Main.js
angular.module('appServices', ['ngResource']).
factory('socket', function($rootScope){
    var socket = io.connect();
    return {
        on: function (eventName, callback){
            socket.on(eventName, function(){
                var args = arguments;
                $rootScope.$apply(function(){
                    callback.apply(socket, args);
                });
            });
        },
        emit: function (eventName,data, callback){
            socket.emit(eventName, data, function (){
                var agrs = arguments;
                $rootScope.$apply(function (){
                    if(callback){
                        callback.apply(socket, agrs);
                    }
                });
            })
        }
    };
});
Controller.js
function activityCtrl($scope, socket){   
$scope.createStatus = function(){
    var sttData = $scope.stt;       
    socket.emit('createStt',sttData);
}
socket.on('addStt',function(data){
    $scope.user.activity.unshift(data);
});
socket.on('myStt',function(data){
    $scope.user.activity.unshift(data);
});
}
Main.js
angular.module('webProfileApp',['appServices'])// appServices duoc goi tu services.js
.config(['$routeProvider', function($routeProvider){
    $routeProvider.
        when('/activity/:userId',{ templateUrl: 'partials/me.html', controller: activityCtrl });
}]);
In Serverside:
app.js
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
io.sockets.on('connection',user.createStt);
User.js
exports.createStt = function(socket){
socket.on('createStt',function(dataSocket){
    console.log('Save status---------');
    var reqBody = dataSocket;
    //
    //Save data 
    //
    socket.broadcast.emit('addStt',reqBody);
    socket.emit('myStt',reqBody);
        });
    });
 
     
    