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. 如何進行JMX客戶端輪詢
- 4. 如何在沒有客戶端發送任何請求的情況下從Windows Azure服務器向客戶端移動應用程序(iOS)發送消息?
- 5. 如何在不進行輪詢的情況下實現std :: when_any?
- 6. 如何在不進行輪詢的情況下等待線程?
- 7. 棘輪客戶端消息
- 8. 如何向多個客戶端發送相同的消息
- 9. Akka TcpPipeLine:如何在不首先接收init.Event的情況下將消息發送到客戶端/服務器?
- 10. Python xmpppy客戶端不發送消息到appengine xmpp客戶端
- 11. 如何從Web服務向Android客戶端發送消息?
- 12. 如何阻止客戶端向服務器發送消息?
- 13. SignalR .Net客戶端:如何向羣組發送消息?
- 14. 如何從Jersey @POST方法向客戶端AJAX發送消息?
- 15. 如何使用signalr向客戶端發送消息?
- 16. 如何讓服務器向客戶端發送連接消息?
- 17. 如何正確地向客戶端發送HTTP消息
- 18. 如何使用WampSharp向客戶端發送消息?
- 19. 如何從Node.js客戶端向WSO2 Message Broker發送消息
- 20. 如何使用WampSharp向特定客戶端發送消息?
- 21. Nodejs websocket:如何在沒有服務器響應的情況下連續發送客戶端消息
- 22. 棘輪WebSocket服務器可以向客戶端發送消息嗎?
- 23. 從Android Websocket客戶端發送消息
- 24. 客戶端無法發送消息
- 25. ServerSocket發送消息給客戶端
- 26. 套接字客戶端發送消息
- 27. 將消息發送回客戶端
- 28. 發送通知消息給客戶端
- 29. 詢問客戶端到客戶端之間傳送消息
- 30. Node.js BinaryServer:在流結束時向客戶端發送消息?
因此,當我將聊天集成到我的應用程序中時,我可以使用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