`
RicardoX
  • 浏览: 77207 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

ejabberd的编译,代码解读.

阅读更多

在对erlang这个语言有些了解这后,我有些自已写点代码的想法,
但想想c++之父说的,不重新造一个车轮。
     我决定用ejabberd来玩玩。
     ejabberd是一个erlang实现的xmpp服务器。什么是xmpp呢?jabber协议中最主要的部分。
xml通过stream的形式进行通迅,定义的im交互。
     ejabberd有部分代码采用c 接口的方式实现。
     主要在于xml解析,以及ssl,ut8f,zip stream这几个。
     这几个gnu的最好的解决方案主要是 expat(xml),iconv(utf8), zlib(zip),ssl(openssl).
     所以在对ejabberd之前先要安装上面讲的几个开发包。
     ejabberd是一个比较linux的程序,先是要configure ,然后再make,make install
     在windows下不存在configure,所以有configure.bat代替,make然后nmake -f makefile.win32
     在configure.bat之后,生成makefile.inc
如果你安装的那几个库和我的一个位置,就改成我这样.
ERLANG_VERSION = 5.6.5
EI_DIR = c:/PROGRA~1/ERL56~1.5/lib/erl_interface-3.5.9
ERLANG_DIR = c:/PROGRA~1/ERL56~1.5
EJABBERD_VERSION = 2.1.0-alpha
SSLDIR = c:/PROGRA~1/ERL56~1.5/lib/ssl-3.10
STDLIBDIR = c:/PROGRA~1/ERL56~1.5/lib/stdlib-1.15.5
OPENSSL_DIR = D:\workspace\sdk\openssl-0.9.8a.win32
DBTYPE = generic
EXPAT_DIR = C:\Program Files\Expat 2.0.1
EXPAT_LIB = $(EXPAT_DIR)\Bin\libexpat.lib
ICONV_DIR = D:\workspace\sdk\iconv-1.9.2.win32
ICONV_LIB = $(ICONV_DIR)\lib\iconv.lib
ZLIB_DIR = D:\workspace\sdk\zlib-1.2.3.win32
ZLIB_LIB = $(ZLIB_DIR)\lib\zlib.lib
在编译的过程中还会出现lib找不到的,你就到相应的makefile里面改成对应的lib好了。
 
ejabberd的工程主要通过ejabberd.app 组织起来
ejabberd.erl :
application:start(ejabberd).
ejabberd_app.erl:
     Mod:start(); 
ejabberd_listener.erl
     通过 conf 得到<!---->ejabberd_c2s,
    开始listen
    如果有连接,accpet之后
<!---->ejabberd_socket:start(Module, gen_tcp, Socket, Opts)
 Receiver = ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize),
case Module:start({?MODULE, SocketData}, Opts) of
                {ok, Pid} ->
                    case SockMod:controlling_process(Socket, Receiver) of
                        ok ->
                            ok;
                        {error, _Reason} ->
                            SockMod:close(Socket)
                    end,
                    ejabberd_receiver:become_controller(Receiver, Pid);
                {error, _Reason} ->
                    SockMod:close(Socket)
ejabberd_receiver中将xml_stream和c2s关联起来.
receiver收到数据发送到xml_stream.
xml_stream解析数据后发送到c2s状态机.
c2s实际上就是一个gen_fsm的状态机。
根据xml_stream的情况解析jabber xmpp协议。
ejabberd官方文档中提到的那些关于xmpp收到的事件的hook,就是在c2s中实现的。
c2s中调用ejabberd_hooks:run_fold()来运行相就的hook。
 
ejabberd中的mod实际上是一ejabberd作者实现的一个behaviour,如同gen_server这些的实现。
这玩意有点像java中的接口,其他模块就是要实现在gen_mod中的回调函数,就可以作为一个mod来使用。
 
     呵呵,整个工程就是这样。

分享到:
评论

相关推荐

    ejabberd安装配置[归纳].pdf

    Ejabberd安装配置详解 Ejabberd是一款流行的开源即时通讯服务器软件,具有高度灵活性和可扩展性。下面是Ejabberd安装配置的详细知识点解析: Ejabberd下载 Ejabberd的下载可以从官方网站获取,目前支持多种操作...

    ejabberd 群聊 strophe.js 实现

    要深入学习和理解这个demo,你需要阅读和分析这些文件中的代码,理解它们如何与ejabberd服务器交互以及如何展示群聊功能。 总结来说,ejabberd和strophe.js结合使用,可以在Web应用中实现强大的即时通信功能,包括...

    ejabberd安装配置.docx

    Ejabberd 安装配置 Ejabberd 是一个基于 XMPP 协议的 instant messaging 服务器,主要用于实时通信和即时消息传递。下面是 Ejabberd 安装配置的相关知识点: 一、Ejabberd 下载 Ejabberd 的安装需要从官方网站...

    ejabberd windows installer

    - **服务配置**:配置ejabberd服务,包括监听的端口、认证方式、模块启用等,这些通常在ejabberd.yml配置文件中进行。 - **安全管理**:设置管理员账号和密码,确保服务器的安全性。 - **启动与管理**:安装完成后,...

    Android使用smack连接ejabberd服务器注册、收发消息

    Message message = new Message("recipient@your.ejabberd.server.com", Message.Type.chat); message.setBody("Hello, this is a test message!"); ChatManager chatManager = ChatManager.getInstanceFor...

    ejabberd-2.1.11

    windows环境下的ejabberd。。。点击即可安装

    ejabberd-1.1.3_1-windows-installer.exe

    点击即可安装。。。一路next下去

    ejabberd 服务器测试客户端spark

    ejabberd是一款开源的XMPP服务器,广泛用于构建实时通信系统,如即时消息、VoIP、协作工具等。在部署ejabberd服务器后,为了确保其正确配置和功能正常,通常需要一个客户端来进行测试。在这个场景中,"ejabberd ...

    ejabberd源码

    作为一款开源软件,ejabberd遵循GPLv2许可证,允许用户自由地使用、修改和分发源代码,从而鼓励社区参与和定制化。 ejabberd是由Erlang/OTP编程语言开发的。Erlang是一种高度并发、分布式、面向过程的语言,非常...

    android+ejabberd

    IM(ejabberd)服务器的客户端android开发的代码详解,该代码例子包含单聊、群聊、发送文字、发送及接收文件等功能。

    ejabberd-14.07聊天服务器

    3. **配置**:ejabberd的配置文件通常为ejabberd.yml,你需要根据实际需求进行编辑,如设置监听端口、数据库连接、认证方式等。 4. **启动和管理**:使用ejabberd的控制脚本启动服务器,并通过命令行工具管理服务器...

    ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议

    为了修复这些问题,开发者需要深入研究XEP-0016规范,并对比ejabberd源代码,确保所有操作都符合标准。此外,进行详尽的测试,包括与其他XMPP服务器和客户端的互操作测试,是至关重要的。 在进行源码分析时,可以...

    ejabberd-stanza-ack:ejabberd 13.xx的ejabberd节确认模块

    ejabberd stan ack v0.6 当ejabberd服务器已收到您的消息时,此模块将向您的发件人发送... 使用以下命令将已编译的.beam文件移动到ejabberd的ebin文件夹(例如/ lib / ejabberd / ebin): mv mod_stanza_ack.beam /

    使用Android NDK编译Android平台的eXosip库

    在其中指定源代码路径、编译选项、库依赖等。例如,你可能需要包含`src`目录,并链接到必要的系统库如`log`、`dl`等。 4. **设置NDK编译**:使用Android Studio的命令行工具或直接在`build.gradle`文件中配置NDK...

    iOS xmpp ejabberd服务器

    本文件主要关注的是如何在iOS平台上使用XMPP与ejabberd服务器进行集成,实现即时通讯功能。 ejabberd是一款开源的XMPP服务器,支持多种平台,包括iOS。它提供了强大的可扩展性和高可用性,能够处理大量的并发用户,...

    Android IM开发 Ejabberd+asmck+spack

    本项目“Android IM开发 Ejabberd+asmck+spack”提供了一套完整的解决方案,包括服务器端、Android客户端以及PC端客户端。 **Ejabberd服务器** Ejabberd是一款开源的XMPP(Extensible Messaging and Presence ...

    ejabberd-15.07-osx-installer.app.zip

    ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...

    ejabberd_rest_client:面向ejabberd的REST客户端

    在 ejabberd_rest_client-master 压缩包中,包含了ejabberd_rest_client的源代码、示例、测试和文档,可以帮助你快速理解和使用这个库。通过阅读源代码和示例,你可以了解到如何构建请求,以及如何处理各种API操作...

    Ejabberd-2.1.10-mac

    在压缩包子文件的文件名"ejabberd-2.1.10-mac-intel-installer.app"中,我们看到"mac-intel",表明这是为Mac上的Intel处理器编译的版本。".app"是Mac OS X中的应用程序包装格式,意味着解压后可以直接运行,符合描述...

Global site tag (gtag.js) - Google Analytics