针对不同用户的SocketIO syncUpdate模型

时间:2015-04-10 13:39:26

标签: angularjs node.js websocket socket.io yeoman-generator-angular

我一直在编写一个网络应用程序,个人用户将发布他们的任务,并将显示在他们的新闻源上。我曾经使用过ifoman的带有角度的fullstack框架的socket io。

我要做的是,当用户向目标模型添加新数据时,在socketSyncUpadtes上,$ rootScope.getUserGoals得到更新,用户看到新条目。但我希望每个用户都能做到这一点,这就是为什么我要包含userid,以确保它只提取用户特定的数据。

但实际上正在发生的事情是,所有连接的用户都获得了这个套接字流并且也更新了他们的模型,但是当页面刷新时,它总是只有那个查询提取的内容,只有用户特定的数据。

这是我获取用户特定数据的方式

$rootScope.getUserGoals   = function (userid){
  //get current todo task views
  $http.get('/api/goals/name/'+userid).success(function(goals) {
      $rootScope.userGoalArr = goals;
      socket.syncUpdates('goal', $rootScope.userGoalArr);
    });
 };

然后用这个

显示在视图中
 <ul class = "holdTaskul" ng-repeat="view in filtered = userGoalArr | orderBy:'-created'">      

我在google上查找并搜索了很多内容,以弄清楚如何分隔每个用户套接字流并将它们附加到他们的登录凭据。我遇到过这个socket-jwt和session令牌。我不是socket的专家。如果有人能指出我正确的方向,我打算做什么,我将不胜感激。

socket.syncUpdate函数的套接字配置如下

 syncUpdates: function (modelName, array, cb) {
    cb = cb || angular.noop;

    /**
     * Syncs item creation/updates on 'model:save'
     */
    socket.on(modelName + ':save', function (item) {
      var oldItem = _.find(array, {_id: item._id});
      var index = array.indexOf(oldItem);
      var event = 'created';

      // replace oldItem if it exists
      // otherwise just add item to the collection
      if (oldItem) {
        array.splice(index, 1, item);
        event = 'updated';
      } else {
        array.push(item);
      }

      cb(event, item, array);
    });

    /**
     * Syncs removed items on 'model:remove'
     */
    socket.on(modelName + ':remove', function (item) {
      var event = 'deleted';
      _.remove(array, {_id: item._id});
      cb(event, item, array);
    });
  },

我还配置了用于通过此

发送身份验证令牌的套接字
   // socket.io now auto-configures its connection when we ommit a connection url
var ioSocket = io('', {
  // Send auth token on connection, you will need to DI the Auth service above
  query: 'token=' + Auth.getToken(),
  path: '/socket.io-client'
});

并使用socketio-jwt通过该

将秘密会话发送到套接字服务
 module.exports = function (socketio) {
  socketio.use(require('socketio-jwt').authorize({
    secret: config.secrets.session,
    handshake: true
  }));

0 个答案:

没有答案