1

node.js と now.js を使用して、nowjs「グループ」内のオブジェクトの状態を任意の数のクライアント間で共有するアプリケーションがあります。

私がやろうとしていることの例として、now.js に付属しているマルチルーム チャットの例の中で、ユーザーが選択した ID を持つ任意の数のルームがあるとしましょう。ユーザーが ID を知っていれば、その部屋に入る (または最初に "作成" する) ことができます。部屋が作成されて通信が開始されると、各部屋に保持される「履歴」オブジェクトがあります。history オブジェクトには、1 つまたは 2 つのプロパティと、それぞれがユーザー プロパティ、コメント プロパティ、日時プロパティを持つコメント オブジェクトの配列が含まれています。新しいユーザーが接続すると、すぐに履歴にアクセスできるようになります。

グループスコープのオブジェクト変数をサーバーに保存して同期する方法はありますか? 私はこれについて間違った方法で考えていますか?私はクレイジーですか、それとも少し遅いですか?

4

1 に答える 1

0

はい、分かりました。

サーバー側に新しい関数 createHistory(groupid) があります。これは、ユーザーが部屋 (グループ) に入ったときにまだ存在しない場合、新しい履歴オブジェクトを返します。これは、このユーザーがルームを作成したばかりの場合に発生します。

この履歴オブジェクトは、add、remove、および list メソッドを使用します。クライアントからリストを取得する必要があるため、次のようなコールバックを使用することが重要です。

api.get = (callback) ->
  callback(_history)

結果を割り当てます。

everyone.getGroup(this.now.groupid).now.history = createHistory(this.now.groupid)

これで、サーバーに履歴を追加できます。

api.add = (time,user,text) ->
  _history.items.push {time:time, user:user,text:text}

そして、私のクライアントからそれに到達します:

now.history.get (history) ->
  for item in history
    #do something...

唯一の欠点は、部屋が空っぽになると、履歴が蒸発することです...と思います。最後の切断を確認して、必要に応じてどこかに永続化できると思いますが。

于 2012-01-03T22:25:54.530 に答える