2011-10-19 27 views
1

我目前正在爲Google課程項目之一開發Google App Engine上的應用程序,現在正在嘗試提供一個側面板,當有人登錄並連接到我的應用程序時,它將自行更新。目的是讓其他用戶看到誰在線,以便他們可以在遊戲中互相挑戰(是的,我正在編寫遊戲應用程序)。我設法通過使用Channel API來實現這一點,從而實現渠道呈現和實施處理程序。它的工作原理完美,但只有當我留在頁面上並有人登錄時才能正常工作。當我轉到其他頁面時,我無法檢查該用戶是否仍處於連接狀態。該列表僅在有人連接到該列表時更新,但不會顯示當前連接的用戶。使用頻道檢查客戶端狀態

有沒有一種方法可以檢查哪些用戶使用GAE的通道連接?我注意到,當我的應用程序嘗試將ChannelMessage發送到當前未連接的clientId時,會顯示一條警告消息。 Channel API中有什麼可以讓我做同樣的事情嗎?

回答

2

這聽起來像你要求的是一個像channel.enumerate_connected_clients()方法。

沒有這樣的事情。您需要使用數據存儲區和/或memcache來自行跟蹤它。如果你只是使用數據存儲區,你可以做這樣的事情:

定義你的模型:

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

創建一個新的客戶端實體,當您創建的頻道:1

# 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. 

枚舉您的C顯示它們的實體是一個留給讀者的練習。正如動態更新現有客戶端的列表一樣。