GAE Chats的每個示例都使用某種輪詢。但是,如果我的GAE應用程序持有客戶端列表(如有必要,請在數據存儲區中),也許我可以通過向所有這些客戶端發送消息來避免輪詢。我怎樣才能做到這一點?如何在不進行輪詢的情況下向客戶端發送消息?
1
A
回答
6
找到一個偉大的教程使用XMPP如果你談論的是HTTP,簡單的答案是,GAE目前不支持它。我想你所問的有時叫做BOSH。一旦WebSockets變得更加普遍,它們將成爲解決這個問題的絕佳解決方案。
與此同時,您可能想看看XMPP。使用XMPP可以避免輪詢。谷歌已經宣佈了一個Channel API(尚未發佈),它基本上可以爲您提供與websockets相同的功能。
2
你可能已經看到了一些聊天室的例子...
既然你只是想將消息發送到用戶的數據存儲區(提示:IMProperty是偉大的,存儲這些數據),這是早晚的事情直接發送消息:
from google.appengine.api import xmpp
# `destination` is a list of JIDS
# `message` is a normal unicode string
xmpp.send_message(destination, message)
您可以通過尼克·約翰遜here
0
注意,你現在可以使用這個App Engine的通道API:http://code.google.com/appengine/docs/python/channel/
您可以使用給定的客戶端創建一個通道:當你想更新客戶端然後
channel.create_channel(client_id)
,發送消息:
channel.send_message(client_id, message)
基本上每個客戶將獲得一個持久連接,你可以把信息通過。
相關問題
- 1. 如何在沒有客戶端請求的情況下在signalR中向客戶端發送消息
- 2. Netty IO向客戶端發送消息
- 3. 如何在不進行輪詢的情況下實現std :: when_any?
- 4. 棘輪客戶端消息
- 5. Python xmpppy客戶端不發送消息到appengine xmpp客戶端
- 6. 如何從Web服務向Android客戶端發送消息?
- 7. 如何阻止客戶端向服務器發送消息?
- 8. 如何正確地向客戶端發送HTTP消息
- 9. 如何使用WampSharp向客戶端發送消息?
- 10. SignalR .Net客戶端:如何向羣組發送消息?
- 11. 如何使用WampSharp向特定客戶端發送消息?
- 12. 如何讓服務器向客戶端發送連接消息?
- 13. Nodejs websocket:如何在沒有服務器響應的情況下連續發送客戶端消息
- 14. 客戶端無法發送消息
- 15. ServerSocket發送消息給客戶端
- 16. 發送通知消息給客戶端
- 17. 套接字客戶端發送消息
- 18. 在c#中向客戶端屏幕發送歡迎消息
- 19. Node.js BinaryServer:在流結束時向客戶端發送消息?
- 20. 向所有客戶端發送消息時發生ConcurrentModificationException
- 21. C#Tcpclient客戶端發送消息到另一個客戶端
- 22. 如何檢查代理何時向客戶端發送消息(訂戶)
- 23. 返回狀態碼並在客戶端獲取消息或直接向客戶端發送錯誤消息
- 24. 如何在客戶端發送和接收WebSocket消息?
- 25. 如何在不進行輪詢的情況下獲取gmail通知
- 26. 如何在客戶端輪詢狀態
- 27. 從服務器向多個客戶端發送多條消息
- 28. Apache Mina UDP服務器向客戶端發送消息
- 29. 無法向所有客戶端發送消息Java
- 30. Java簡單聊天 - 向所有客戶端發送消息
因此,當我將聊天集成到我的應用程序中時,我可以使用xmpp和jids將消息發送給用戶:whatever @ upserip:userport。然後我的應用程序發送我的消息作爲一個http請求。正確?我可以像那樣遍歷NAT嗎? – Laures 2010-10-03 20:22:52
@Laures現在你讓我感到困惑。根據我的理解,你要找的其實是羅伯特的口號,而不是我的。我會提高他的答案。 – 2010-10-03 20:50:22
好的......現在我很困惑。我想接收來自客戶的信息並將接收到的數據分發給所有客戶。我想不做輪詢。當頻道api出局時,這應該很簡單,但爲什麼現在它變得不可行? (也許我應該提到這是我的第一個gae或網絡相關項目) – Laures 2010-10-04 07:20:18