我们正在开发一款在线实时网页浏览器游戏,我们选择使用 APE Server。我们有一个来自我们之前项目的游戏内聊天系统,我们希望将其移植到 APE。由于我们对 APE 有点陌生,我们不确定哪种方案会更好,或者可能根本不适用。
现在聊天的工作方式如下: - 聊天有 4 个房间,用户在其中谈论某些特定的游戏方面(贸易、战斗等),当用户完全重新加载页面时,他/她会从 db(数据库)获取最新的 30 条消息已打开的聊天室 - 聊天室定期发出 AJAX 请求以查看任何聊天室中是否有新消息,但实际最新消息仅下载当前打开的聊天室。为了让事情变得更加复杂,我们将聊天分成不同的语言 - 用户只收到他们偏好 cookie 中语言的消息。他们可以随时更改它,然后他们会收到其他语言的消息。
现在我们正在转向完全基于 AJAX 的系统,根本不需要重新加载页面,我们将自动最小化请求以从 db.xml 获取最新的 30 条消息。
但困难的部分是 - 如何组织将消息存储在数据库中并通过 APE 发送给用户?
我们考虑了以下选项: - 用户向 PHP 脚本发送消息,它转到 db,然后 PHP 通过 inlinepush 将消息提交给 APE(根据文档,inlinepush 仅支持一个通道,我们不确定它将如何工作然后)然后 APE 将消息发送给所有用户(看起来,我们需要在 APE 服务器上存储用户首选语言,因此消息只发送给适当的用户);- 用户将消息发送到APE Server,APE Server将消息传递给其他同种语言的用户,同时调用PHP脚本将消息存储到db;- 用户将消息发送到APE Server,APE Server 将消息传递给相同语言的其他用户,并使用APE 自己的Mysql 能力将消息存储到db。
一方面,我们更喜欢通过 PHP 存储数据,因为我们有一个非常强大的数据库访问库,并且我们希望避免将其移植到 APE 和 Javascript 来存储聊天消息(而且我们也没有使用服务器端 JS 的经验)。但是如果它会带来一些好的优势,那么我们当然会使用APE自己的Mysql。
我们也担心,APE 是否能够按用户的语言过滤所有用户并仅将消息发送给适当的用户?APE 如何处理 cookie?
此外,APE 中基于子域的频道设置起来似乎有点尴尬,但我们还没有找到更好的选择。