Ejabberd目前是可扩展性最好的一种Jabber/XMPP服务器-集群-Erlang-即时通讯服务器

ejabberd简介

ejabberd是基于Jabber/XMPP协议的即时通讯服务器,由GPLv2授权(免费和开放源码),采用Erlang/OTP开发。它的特点是,跨平台,容错集群和模块化。

Ejabberd目前是可扩展性最好的一种Jabber/XMPP服务器,支持分布多个服务器,并且具有容错处理,单台服务器失效不影响整个cluster运作。

9月13日#成都#源创会,Swift、Docker、云计算、大数据!

Erlang是一个好东东,只是可惜了没有一个好的IDE,让我想当起了javascript多年的沉寂。
  花了一天时间,终于把ejabberd的流整理理清楚了。放在这里,算是一次总结。

  第一步,编译。

    我使用的版本是ejabberd-2.0.3,这一版本是在差不多2年前选择的,当年选择的时候还是最新版本,重回http://www.ejabberd.im/上 查看发现现在已经升级到2.1.3了,感叹时间过得真快,转眼间10个版本了。
    不得不说,编译ejabberd是个力气活,从网上下载了ejabberd,如果期望下载后直接就能编过那就大错特错了。erlang实现了夸平台,但我 个人感觉是一个很*ux化的东东。首先他所需要的依赖都不在自己的目录下,也就是说,svn上面仅仅提供erlang的代码以及link in drive(不知道这个?那您还需要更深入的了解erlang)的c代码。按官方说明运行configure.bat,看看这个bat都干了些啥:

//------------------------BAT--------------------------
@if "x%1"=="x--help" goto usage

@set arg=dynamic
@if "x%1"=="x--static" set arg=static

@echo Configuring for %arg% build...

erlc configure.erl
erl -s configure -env arg %arg% -noshell

@goto end

:usage
@echo Usage: configure.bat
@echo or configure.bat --static
@echo or configure.bat --help

:end
//-----------------------------------------------------
    嗯,大致意思 就是说先运行先编译同目录下的configure.erl程序,所以在这个时候,你必须保证你的erlang环境正常,不然无法正常通行此bat。编译完 了之后在后台执行configure模块的start方法。

    如果一切正常,你会发现你的目录下多了一个makefile.inc文件,这都是拜configure.erl所赐。

    其实这个configure.erl写得不够好。他强制的将GNU的解决方案设置到了c:/Gnu/SDK而没有任何的提示。所以接下来要配置相关GNU 方案的路径。所使用到的GNU方案有:
   libiconv:编解码
   ExpatLib:解析XMP,SAX模型,记得好像已停止开发维护。
   Zlib    :大名顶顶的压缩解压的。上次因自己静态编译这个东东忘在vs 2008中加版本提升郁闷死我了,在产品发布给客户后发现在xp下无法运行,悲据了。。。
   openssl : 实现ssl,同样大名顶顶

   如果还没有这些库,你需要先从相关开源站点上下载这些库。

   下载好后配置路径。在配置路径时要注意,ejabberd的开发者再一次在makefile中强建了你的意志。他自动在你设置的目录下找include子 目录及lib子目录,特别是openssl,他会自动去找lib/vc/...,所以如果你不想修改makefile.win32,那么,请你乖乖的按照 此目录放置你的动态库,头文件等。

   一切准备就续,打开你的cmd,cd到你的目录,然后:nmake -f makefile.win32

   如果你避免了我提到的陷阱,你应该可以顺利编译过。

   如果你看到这里就开始编译,我只好说,这样也行。。。

   不过等等,吾是一个在代码,结构目录上有洁癖的人,他居然把beam与erl放在同一个目录,所以,下一步需要用erl的emakefile把代码指向 ebin目录,对于在makefile中写死了的你码,只有您去改改makefile了。

 

    至此,编译告一段落。。。


   ejabebrd结构的说明


1,ejabberd的入口点
   这里的入口点与c里面的入口点的概念有点不太一样,事实上我想说的是从什么地方开始,让整个ejabberd系统run起来,这个听起来更像是你拥有了一 台高性能的汽车之后寻找启动按钮。
   ejabberd:start就是这样一个启动按钮,他调用application:start,并传入ejabberd做为参数,哈哈,一旦调用此方法 以后,请您端起您的咖啡,好好享用erlang为我们提供的超人性化服务。他会在你的ejabberd.beam目录下录找ejabberd.app文 件,查找回调模块,大至是这样子:

{application, ejabberd,
 [
  {mod, {ejabberd_app, []}}]}.
  
   ejabberd中定义了回调方法(就像接口一样)。至此,导火线已点燃。让我们看看ejabberd_app.erl中做了啥。

   2,加载其它模块
   ejabberd中的start/2加载首先启动ejabberd_config:start读取配置,然后按配置中的模块,一个一个载加起来,模块均实 现gen_mode的behaviour。

   3,客户端连接处理
ejabberd做为一个服务器,关于客户端连接的处理必将成为一个核心。这 一块的逻辑基本上就是在ejabberd_listener模块中调用ejabberd_socket:start(Module, gen_tcp, Socket, Opts).ejabberd_socket通过SockMod:controlling_process(Socket, Receiver)对接收数据的进程重定向,定向到receiver进程,而Receiver进程通过 ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize)产生。ejabberd_receiver实现了gen_server的behaviour。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值