【问题标题】:Checking client presence using Channel使用 Channel 检查客户端的存在
【发布时间】:2011-10-19 08:36:30
【问题描述】:

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

有没有一种方法可以检查哪些用户使用 GAE 的频道进行了连接?我注意到当我的应用程序尝试将 ChannelMessage 发送到当前未连接的 clientId 时,会打印一条警告消息。 Channel API 中有什么东西可以让我做同样的事情吗?

【问题讨论】:

    标签: google-app-engine channel-api


    【解决方案1】:

    听起来你要求的是像 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.
    

    枚举您的客户实体并显示它们是留给读者的练习。就像动态更新现有客户的列表一样。

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2010-12-22
      • 2015-01-27
      • 2013-01-16
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      相关资源
      最近更新 更多