2010-10-03 5 views
1

Chaque exemple de GAE Chats utilise un type d'interrogation. Cependant, si mon application GAE contient une liste de clients (dans le magasin de données si nécessaire), je pourrais peut-être éviter d'interroger en envoyant un message à tous ces clients. Comment puis-je atteindre cet objectif?Comment envoyer des messages aux clients sans interrogation?

Répondre

6

Si vous parlez HTTP, la réponse courte est que GAE ne prend pas en charge il. Ce que je pense que vous demandez est parfois appelé BOSH. Une fois que WebSockets deviendra plus répandue, ils seront une excellente solution pour ce problème.

Dans le même temps, vous voudrez peut-être regarder XMPP. En utilisant XMPP, vous pouvez éviter l'interrogation. Google a annoncé un Channel API (encore à paraître) qui vous donnera essentiellement les mêmes fonctionnalités que les websockets.

2

Vous avez probablement vu quelques exemples de salle de chat ...

Puisque vous voulez juste d'envoyer un message aux utilisateurs sur votre datastore (Astuce: la IMProperty est grande pour stocker ces données), il est juste une question d'envoyer directement le message:

from google.appengine.api import xmpp 
# `destination` is a list of JIDS 
# `message` is a normal unicode string 
xmpp.send_message(destination, message) 

vous pouvez trouver un tutoriel sur l'utilisation XMPP par Nick Johnson here

+0

Ainsi, lorsque j'intègre le chat dans mon application, je pouvais envoyer des messages aux utilisateurs en utilisant xmpp et jids comme: whatever @ upserip: userport. Ensuite, mon application envoie mon message sous forme de requête http. correct? puis-je traverser le NAT comme ça? – Laures

+0

@Laures maintenant vous m'avez confus. D'après ce que je comprends, ce que vous cherchez est en fait sur la réponse de Robert, pas sur moi. Je vais upvoting sa réponse. –

+0

ok ... maintenant je suis confus. Je souhaite recevoir des informations des clients et distribuer les données reçues à tous les clients. Je veux faire ceci sans interroger. quand le canal api est sorti cela devrait être simple, mais pourquoi est-il imposible maintenant? (peut-être que j'aurais dû mentionner que c'est mon premier projet lié gae ou réseau) – Laures

0

Notez que vous pouvez maintenant utiliser l'API App Engine canal pour cela: http://code.google.com/appengine/docs/python/channel/

Vous pouvez créer un canal pour un client donné en utilisant:

channel.create_channel(client_id) 

Ensuite, lorsque vous souhaitez mettre à jour ce client, envoyer un message:

channel.send_message(client_id, message) 

Fondamentalement chaque client obtiendra une connexion persistante que vous pouvez pousser des messages.

Questions connexes