1

我目前正在为我的一个课程项目在 Google App Engine 上开发一个应用程序,现在我正在尝试提供一个侧面板,该面板将在有人登录并连接到我的应用程序时自行更新。目的是让其他用户看到谁在线,这样他们就可以在游戏中互相挑战(是的,我正在写一个游戏应用程序)。我设法通过使用 Channel API、启用通道存在和实现处理程序来做到这一点。它运行良好,但只有当我停留在一个页面上并且有人登录时才有效。当我转到另一个页面时,我无法检查该用户是否仍然连接。该列表仅在有人连接时更新,但不会显示当前连接的用户。

有没有办法可以检查哪些用户使用 GAE 的频道连接?我注意到当我的应用程序尝试将 ChannelMessage 发送到当前未连接的 clientId 时,会打印一条警告消息。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

现在在您的连接或断开处理程序中,更新“已连接”属性:

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 回答