如何在Google AppEngine上实现“实时”消息传递?
我正在Google AppEngine上创建一个网页应用,想让用户在某些事件发生后尽快收到通知。这个问题有点像聊天服务器,因为我需要在一个连接上发生的事情(比如有人在聊天室里发消息)能够传递到其他多个连接上(聊天室里的其他人能收到这条消息)。为了让服务器快速更新到客户端,我打算使用长轮询和XmlHttpRequest,希望AppEngine不会干扰,除了可能限制超时时间。不过,真正的问题是如何在AppEngine上高效地实现连接之间的通知。
在AppEngine上有没有支持这种跨连接通知的方法,而不是让程序一直等待?我能想到的工具要么是使用数据存储(速度慢),要么是使用内存缓存(不太可靠),而且这些方法都无法避免让程序一直等待。
注意:我知道AppEngine支持XMPP。这是相关的,但我想要一个基于浏览器的解决方案,使用XMPP给用户发送消息不是一个选项。
3 个回答
1
你可以使用一个托管的Comet服务,比如WebSync On-Demand。这个服务可以让你发送事件,不管你用什么类型的服务器来托管。
1
App Engine的计划中有对Comet的支持,否则你在实现这个功能时可能会遇到一些困难。
4
在App Engine上,处理请求的时间限制为30秒,这让长轮询变得很困难。此外,你需要保持平均执行时间较低,否则很快就会没有足够的实例来执行你的查询——App Engine只有在你的应用运行得比较快时,才会提供新的实例。基于这些原因,App Engine上非常不建议使用长轮询。
不过,如果你愿意等一段时间,路线图中提到会支持“浏览器推送(Comet)通信”,这正是你需要的功能。