1

現在、コースプロジェクトの1つとしてGoogle App Engineでアプリケーションを開発しており、誰かがログインしてアプリケーションに接続するたびに自動的に更新されるサイドパネルを考え出そうとしています。目的は、他のユーザーが誰がオンラインであるかを確認できるようにすることです。これにより、他のユーザーはゲームでお互いに挑戦できます(はい、私はゲームアプリを作成しています)。Channel APIを使用し、チャネルプレゼンスを有効にし、ハンドラーを実装することで、これを実現できました。完全に機能していますが、ページにとどまって誰かがログインした場合にのみ機能します。別のページに移動すると、そのユーザーがまだ接続されているかどうかを確認する方法がありません。リストは、誰かが接続したときにのみ更新されますが、現在接続しているユーザーは表示されません。

GAEのチャネルを使用して接続しているユーザーを確認する方法はありますか?アプリが現在接続されていないclientIdにChannelMessageを送信しようとすると、警告メッセージが出力されることに気付きました。Channel APIに、同じことを実行できるものはありますか?

4

1 に答える 1

2

あなたが求めているのは、channel.enumerate_connected_clients() のようなメソッドのようです。

このようなものは何もありません。自分で追跡するには、データストアや memcache を使用する必要があります。データストアのみを使用する場合は、次のようにすることができます。

モデルを定義します。

class Client(db.Model):
  name = db.StringProperty()
  connected = db.BooleanProperty()

チャネルを作成するときに、新しいクライアント エンティティを作成します。

  # Create an entity in the database and use its key as the clientid
  client = Client(name=username, connected=False)
  client.put()
  token = channel.create_channel(str(client.key()))

  # Then pass that token down to your client

接続または切断ハンドラーで、'connected' プロパティを更新します。

class ConnectHandler(webapp.RequestHandler):
  def post(self):
    client = Client.get(Key(self.request.get('from')))
    client.connected = True
    client.put()

# Have a similar class for DisconnectHandler, 
# or be more clever by inspecting the path.

クライアント エンティティを列挙して表示する作業は、読者に任されています。既存のクライアントのリストを動的に更新するように。

于 2011-10-19T14:01:30.210 に答える