我想我的项目的技术堆栈,我想到使用ejabberd。该项目将看起来像经典的多用户地牢RPG,玩家将从一个地方移动到另一个地方(地点看起来与聊天室完全一样),他们也会在回合制模式下互相想象和AI 。
我从未使用过ejabberd,但我在使用erlang编写服务器应用程序方面有一些经验。
对于这种游戏来说,ejabberd是否有点矫枉过正?它有很多我不需要的功能。然而,它对于erlang开发者来说是众所周知的,并且也非常稳定和成熟。 ejabberd是否值得将它用作我的在线游戏的传输层,或者我应该更好地发明我自己的轮子,一些小而简单的东西?
我有几年的商业经验,使用ejabberd这样的事情。所以,我的看法:
优点:
- 它当然具有技术能力。
- 这很容易搞定。
- 它很容易扩展和修改。
- 如果您定期更新它,它将解决两个非常重要的方面。 A.网络安全(这对我来说非常重要);和B.正确完成身份验证。仅这两个就足以成为使用它的理由。
- 它出人意料地快。
- 它免费为您提供聊天,在线状态和朋友列表。
- 它免费为您提供MUC(房间)。随着权限等所有事情解决得很好。
缺点:
- 真的不希望找到任何可用的文档。来源主要是你唯一的朋友。
- 真的不希望找到一个社区。这是一条孤独的道路。有一个房间 - ejabberd@conference.jabber.ru但它很安静(几乎是空的)。那里的大多数人不是开发人员,而只是ejabberd用户。邮件列表有点好,但通常不足以找到你寻求的答案。
- 源代码本身并不是erlang项目的最佳示例。如果你想学习如何编写大型,模块化,分布式的erlang软件,那么最好看看像Riak这样的东西。
- 内部API不是很稳定(它们随着版本的变化而变化很大)。因此,我建议将您的软件编写为单独的erlang应用程序,将ejabberd作为外部XMPP组件连接。因此,您将确保通过稳定协议(XMPP)进行通信。当然,你也不能逃避不得不写一些内部的东西。认证和名册(朋友列表)模块是第一个浮现在脑海中的模块。这种组合很难维护和更新,特别是如果你需要热代码加载,但它对我来说仍然是最好的解决方案。尽量将“in-ejabberd”代码保持在最低限度。
- 话虽这么说,只有一个(据我所知)可用的XMPP erlang库。它被称为exmpp,由与ejabberd(ProcessOne)相同的公司开发。它尚未被认为是稳定的。我已经使用它已经有一段时间了,现在没有问题,但你永远不会知道。它也大部分都没有记录(或者当我学习它时)。