0

私は最初のノードアプリケーションを開発しようとしています..そうは言っても、POST経由でユーザー固有のjsonデータをURLに送信するC#アプリがあると言われています。//localhost/data/sendこのデータは〜1〜5秒ごとに送信されます(決定していません)。

次に、ユーザーにログインを要求する Web サイトを作成し、そのユーザーのデータをポーリングして表示します。x秒ごとにページを更新するのではなく、socket.ioやredis pub/subなどのソケットまたはイベントベースのテクノロジーを使用して、接続されたクライアントにデータをプッシュできると考えました。

しかし、ここに問題があります。次の 2 つのことを確実にするにはどうすればよいですか。

  1. 接続されたユーザーのみが自分の情報にアクセスできます
    1. 私は現在エクスプレスを使用していますが、それは本当に何でもオープンです..
  2. データは、リモート Web インターフェイスにログインしているユーザーがいる場合にのみ送信されます

私の考えたプロセスは、ユーザーがデスクトップの c# アプリにログインすると、ユーザーが Web インターフェイスにログインしているかどうかを確認するためにポーリングを開始するというものでした。

ユーザーが Web インターフェイスにログインすると、デスクトップ アプリは、デスクトップ アプリと Web アプリの間で一致するユーザー名に基づいてセッション ID を認識します。次に、そのセッション ID のみへのプッシュを開始します。

これにはredisも必要ですか?それとも、単純な mysql テーブルと socket.io でやっていけますか?

ユーザーがログオフすると、データは永続的である必要はありません。

4

1 に答える 1

1

データを永続化する必要がなく、これがユーザー数の少ない内部の単純なアプリである場合は、キューとアイテムをキューに追加および削除するメソッドを持つモジュールを作成します。

モジュールには、ログインしているユーザーごとにキューがあります。ユーザーがページを離れると (onunload)、ログアウトしてそのユーザーのキューを削除します。呼び出し元の c# アプリがイベントを追加するために呼び出した場合、キューは存在しません。これは、ユーザーがログインしていないことを意味します。ユーザーがログインすると、そのユーザーのキューを作成します。

エクスプレスで認証を行う方法については、こちらを参照してください。Node.js、Express、Mongoose で認証を行う方法は?

このようなもの:

var queue = {};

exports.queueEvent = function(user, event){
  if(queue[user]){
    queue[userid].push(event);
  }
  else{
    return 'user not logged in, come back later';
  }
};

exports.getEvent = function(user){
  if(!queue[user]){
    queue[user] = [];  // this indicates the user is logged in.
    return null; // no events yet.
  }
  return queue[user.shift();
}

exports.logOutUser = function(user){
  if(queue[user]){
    delete queue[user];
  }
}
于 2012-12-12T14:13:10.027 に答える