Erlang在社交应用中的地位突显,自己搭一个大容量高并发的IM服务器变得不那么遥不可及了。Ejabberd 正是这样一个不错的选择,至少是一个很棒的参考。对于一个4核16G内存的服务器,单个Ejabberd节点可以支持30万的IM用户。
ejabberd是基于Jabber/XMPP协议的即时通讯服务器,由GPLv2授权(免费和开放源码),采用Erlang/OTP开发。它的特点是跨平台,容错,集群和模块化。
XMPP是由IETF制定的一个可扩展的即时消息通信协议。XMPP基本有两部分组成,一部分是它的核心协议,还有一部分是扩展协议。其中核心协议主要由RFC-6120、RFC-6121、RFC-6122组成。还有一堆的扩展协议,具体可以参见XMPP官网扩展协议列表部分。一般会使用到的扩展协议包括XEP-0160 XEP-0013离线消息处理、XEP-0045多用户聊天、XEP-0096文件传输。Smack是Java语言写的XMPP Library,貌似Java中较好的XMPP客户端了。
Ejabberd 的系统架构如图所示:(http://docs.ejabberd.im/architect/)
Ejabberd 支持的主要功能有:
l 点对点消息One-to-onemessaging
l 存储转发Store-and-forward(offline messages)
l 通讯录和状态显示
l 群聊
l 消息备档管理
l 在线状态扩展:Personal Event Protocol (PEP)和输入状态指示
l 隐私设定
l 支持vCards的用户资料
l 基于 BOSH 和 websockets的web支持
l 面向移动设备的流式管理(aka XEP-0198)
l 消息发送回执(akaXEP-184)
l 最后的消息活动
l 命令行管理工具…...
Ejabberd既可以使用Mnesia作为数据库,也可以是Mysql等。基于良好的可扩展性,ejabberd同样支持SIP和WebRTC。