谷歌应用引擎(GAE)可以作为XMPP服务器吗?

21

我想使用GAE构建一个多人游戏。当玩家A进行一步操作时,我希望记录细节并让玩家B知道这一步操作。

我考虑在我的客户端中获取一些开源的XMPP库,如果可能的话,通知我的应用程序的在线状态?我不想强制玩家注册类似谷歌聊天这样的服务,所以我会根据会话ID即时生成JID。

期待你的回复!

谢谢

2个回答

9
你无法将gae应用程序变成xmpp服务器,因为你不能打开套接字——这是api所限制的。但是,你不需要运行xmpp服务器来实现你想要做的事情。你可以使用appengine api中提供的XMPP库,使你的应用程序成为一个客户端,你的游戏“客户端”通过它进行通信。请参见python api: http://code.google.com/appengine/docs/python/xmpp/。并非所有的游戏客户端都需要是gtalk客户端,但他们需要能够桥接到gtalk,我相信大多数人都能做到。这里有一个简短的示例:http://code.google.com/appengine/articles/using_xmpp.html

6
这个例子假设用户已经拥有一个XMPP客户端和ID。我认为问题的发起者希望在没有这个假设的情况下也能够运行 - 游戏本身将充当客户端,并生成匿名ID。那种情况也可行吗? - Peter Recore
2
简短的回答是“不行”,或者“可以,但他需要在GAE之外运行自己的xmpp服务器来创建这些匿名的xmpp id,因为GAE客户端无法创建新的id”。如果您选择创建匿名的xmpp id,那么您可能是因为您有一个定制的客户端,并通过xmpp隧道传输游戏协议,对吗?如果想要使用GAE来支持xmpp服务器,那是行不通的,因为它违反了无套接字规则。但是您可以使用外部xmpp服务器并使用GAE来执行转向引擎。 - dar
我曾认为GAE API可能支持XMPP服务器命令,因为文档表明GAE可以是[appid]@appspot.com或[anything]@[app-id].appspotchat.com。但在终于理解了XMPP的工作原理后,我发现GAE只是一个客户端。 否则,是的,XMPP本应是一个隧道,只是为了解决GAE没有套接字的限制。我需要一种方法来立即通知我的玩家而不需要轮询。 - kasuku
起初,我问为什么GAE支持XMPP消息传递,它有发送和接收电子邮件的功能(其覆盖范围更广)。 现在我看到了XMPP的好处。如果它确实拥有庞大的用户群,我期待着构建异步消息传递实现。 但是,如果GAE能够启用sockets,我知道我会使用它。 - kasuku
@dar,已经快6年了。GAE现在是否作为完整的XMPP服务器运行? - Avinash Raj

3

谢谢。我目前正在玩弄EC2微型实例,它与ejabberd非常兼容。 - kasuku
1
GAE现在也有用于推送的通道API,但目前只支持JavaScript。 - kasuku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接