谷歌应用引擎可用作套接字服务器吗?

6

我的网络主机不允许使用 socket servers,所以我一直在研究 GAE。

有没有人知道可以在 GAE 上成功运行的 socket server? 我要用它来做 flash,所以如果可能的话,任何类似于 smartfox 的东西都会很棒。

谢谢。

4个回答

7

谷歌应用引擎现在已经具有通道API功能。

通道API创建了应用和谷歌服务器之间的持久连接,使得您的应用程序可以向JavaScript客户端发送实时消息,而不需要使用轮询。这对于旨在立即更新用户有关新信息的应用程序非常有用。一些示例用例包括协作应用程序、多人游戏或聊天室。一般情况下,在不能预测或脚本化更新的情况下,如在人类用户之间或从非系统生成的事件中传递信息时,使用通道API比轮询更好。- 来自以下链接

http://code.google.com/appengine/docs/python/channel/overview.html

更新:2016年10月27日

Channels API已被弃用,并计划在 2017年10月31日之前关闭。

https://cloud.google.com/appengine/docs/deprecations/channel

替代产品

您可以使用Firebase实时数据库来实现应用程序中更出色的实时功能。Firebase是一个比通道API更强大和可定制的解决方案,它允许与更广泛的客户端进行通信。它目前支持Android、iOS和应用程序以及Web浏览器应用程序。


6

链接已失效 - 这仍然是事实吗? - ScottR
1
这是新链接:http://code.google.com/p/googleappengine/wiki/WillItPlayInJava - Kyle Finley

5

我可以确认,我有一个使用canvas/GWT/App Engine的多人游戏,并使用channels api运行。我使用memcache来保存当前状态,并让客户端向服务器报告他们的当前状态,如果一定时间已过,则服务器将向所有客户端广播新状态(以避免在用户数量较高时频繁发送)。然而,这种方法似乎会占用大量CPU资源,目前我的方法是在服务器上只保留最少量的逻辑,这意味着存在许多漏洞等待被攻击。多人互动需要一些改进,但我已经使玩家在其他客户端中移动,延迟约为半秒钟,这也是因为我没有直接显示上一个位置,而是在旧位置和最后已知位置之间插值。如果有人有更好的方法在Google App Engine上实现而不是使用memcache,请告诉我。


3

5
这是出站套接字,不是入站套接字。 - peritus

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