Ejabberd服务聊天环境搭建
1 XMPP服务器选型
Jabberd 2.x 使用C语言实现,但是,存在着数据库事务的滥用、内存泄露、不一致的非阻塞设计等问题,最重要的是该server已经很长时间没有人维护;因此,chesspark在使用jabberd 2.x三年后,转用ejabberd。无独有偶,Jabber.org也在2010年淘汰Jabberd, 转为使用ejabberd.
Openfire以及Tigase都是基于JAVA的解决方案。但是极光推送团队认为,Openfire单机并发很有限,集群方案不成熟,代码古老而缺乏及时更新,因此不适合应用在生产环境中。
因此,极光团队在初期使用Tigase解决方案。但是在使用中发现,Tigase其集群方案实现复杂,单节点容量有限,后期转为自己开发server.
从编程语言角度看,主流的XMPP Server主要是JAVA和Erlang。JAVA语言的优势是类库完备,容易招人。Erlang的优势是hot code swap, live console, 高并发。
ejabberd与Openfire/Tigase比较而言,最大的优势是相对优雅的集群方案以及更高的并发性能。在没有语言偏向性的情况下,一般在开发初期都会选用ejabberd, 如WhatsApp, Facebook Chat, 米聊。
从各种XMPP Server支持的特性看,ejabberd是对XMPP协议支持最好、实现最为全面的server.
从开源协议看,Tigase采用AGPL开源协议,因此只要有代码修改,就必须对代码进行开源。Openfire采用Apache开源协议,修改代码后可以闭源。ejabberd采用GPL v2开源协议,如果只在服务端提供服务,而不进行代码二次分发,修改代码以后也可以「闭源」
综合以上各因素,Chat Service采用ejabberd作为初期的XMPP Server.
2 服务器环境安装
2.1 Erlang安装
下载地址:http://www.erlang.org/downloads,下载很慢,可以使用迅雷客户端下载,快很多。
直接安装即可。安装后的路径设置,把bin (如 C:\Program Files\erlang19\bin)添加到系统变量的Path后。
otp_win64_18.0和rabbitmq-server-3.5.4
2.2 Ejabberd服务安装
下载安装包:ejabberd(https://www.process-one.net/en/ejabberd/downloads)
以管理员身份安装(否则后续没有权限执行脚本),填写服务器域名为本机,管理员账号admin及密码admin,下一步直到完成。
非管理员身份安装会出现异常:执行脚本比较耗时,一直卡住,然后报错。
Error running Post Install Script.The installation may not have completed correctly
异常情况1:erlsrv: A service with the name ejabberd already exists.
如果有服务ejabberd 存在 先卸载掉,使用命令 sc delete ejabberd01d33ac8933fab90 (ejabberd01d33ac8933fab90 是服务名,从服务属性查看)。
异常情况2:@ejabberd_listener:socket_error:580 Failed to open socket:{5222,ejabberd_c2s,[inet,{ip,{0,0,0,0}}]}: Reason: permission denied
cmd 使用netstat -nao 发现5222端口的进程为3260 是tomcat占用了先禁用掉。
异常情况3:C:\Program Files\ejabberd-17.09\bin\postinstall.cmd拒绝访问。
权限不够,尝试使用管理员身份重新安装Ejabberd。
2.3 启动ejabberd
启动失败。
以管理员身份启动C:\Program Files\ejabberd-17.09\bin\start.cmd,成功。
2.4 登录后台
登录不成功问题
安装时不使用admin ,改为kinglong kinglong 登录后台OK。
3 创建用户使用
3.1登录后台管理页
现在我们的服务器只有一个管理员账号,我们需要增加几个用户,也方便后面测试。
输入http://localhost:5280/admin/ ,使用安装时填写的账号密码登录,进入ejabberd的后台管理页面:
3.2 选择虚拟主机
点击虚拟主机,进入到虚拟主机管理界面。
3.3 管理用户
选择“用户”菜单进入到用户管理界面,可以看到“添加用户”按钮。
点击“添加用户”按钮,添加user1@kinglong和user2@kinglong两个用户:
3.4 用新增的用户登录客户端
用pandion和spark客户端测试,使用新增的用户登录本地的xmpp服务器是可用的。