2016-04-27 9 views
0

私は10行のテーブルを持つ角ページを持っていて、各行にIDがあり、一意のIDを持つページにリダイレクトされているとします。socket.ioのサブスクリプションを購読解除する

私はsocket.ioでこのIDを購読したいと思います。このページを/別のものに変更するときは、前のサブスクリプションを新しいものに置き換えます。

どうすればいいですか?現在のすべてのサブスクリプションをデータベースに保存する必要がありますか?

(私はノード上でsails.jsフレームワークを使用し、クライアントでは角度を使用しています)。

答えて

0

ソケットを切断する(別のページに変更する)と、socket.ioは自動的にソケットを認識しません。

あなたはIDと接続し、あなたの帆のコントローラで使用すると、ID thisよう

EDIT

にユーザーをサブスクライブするとき部屋を購読するには、あなたは、単に角度からのメッセージを送ることができますページによれば、ソケットを追跡するためにシステムを実装する必要があります。

まず、/ API /サービスでサービスを作成/して、それを置く:

module.exports = { 

    switchRoom: function (socket, to_id) { 
     var tmp = _.find(sails.mysubscribers, function (sub) { 
      return sub.socket === socket; 
     }); 
     if (tmp) { // If user came from another page unsuscribe him 
      sails.sockets.leave(socket, 'Unique prefix' + tmp.roomId); 
     } else { 
      tmp = { 
       socket: socket 
      }; 
      sails.mysubscribers.push(tmp); 
     } 

     if (!to_id) { // If the user leave remove him from the array 
      var index = sails.mysubscribers.indexOf(tmp); 
      if (index > -1) sails.mysubscribers.splice(index, 1); 
     } else { 
      tmp.roomId = to_id; 
      sails.sockets.join(socket, 'Unique prefix' + to_id); 
     } 
    } 
}; 

その後、/config/sockets.jsにafterDisconnect機能を編集します。

module.exports.sockets = { 

    afterDisconnect: function (session, socket, cb) { 
     YourService.switchRoom(socket); 
     return cb(); 
    } 
}; 

、ときあなたはswitchRoomをする必要があります。YourService.switchRoom(req.socket, roomId)ここでroomIdは角度によって送信されるIDです。

これだけです!

+0

しかし、私は角度を使用しているので、ページの変更による実際の切断はありません。 – user3712353

+0

ところで答えを編集します;) –

関連する問題