在对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安装配置详解 Ejabberd是一款流行的开源即时通讯服务器软件,具有高度灵活性和可扩展性。下面是Ejabberd安装配置的详细知识点解析: Ejabberd下载 Ejabberd的下载可以从官方网站获取,目前支持多种操作...
要深入学习和理解这个demo,你需要阅读和分析这些文件中的代码,理解它们如何与ejabberd服务器交互以及如何展示群聊功能。 总结来说,ejabberd和strophe.js结合使用,可以在Web应用中实现强大的即时通信功能,包括...
Ejabberd 安装配置 Ejabberd 是一个基于 XMPP 协议的 instant messaging 服务器,主要用于实时通信和即时消息传递。下面是 Ejabberd 安装配置的相关知识点: 一、Ejabberd 下载 Ejabberd 的安装需要从官方网站...
- **服务配置**:配置ejabberd服务,包括监听的端口、认证方式、模块启用等,这些通常在ejabberd.yml配置文件中进行。 - **安全管理**:设置管理员账号和密码,确保服务器的安全性。 - **启动与管理**:安装完成后,...
Message message = new Message("recipient@your.ejabberd.server.com", Message.Type.chat); message.setBody("Hello, this is a test message!"); ChatManager chatManager = ChatManager.getInstanceFor...
windows环境下的ejabberd。。。点击即可安装
点击即可安装。。。一路next下去
ejabberd是一款开源的XMPP服务器,广泛用于构建实时通信系统,如即时消息、VoIP、协作工具等。在部署ejabberd服务器后,为了确保其正确配置和功能正常,通常需要一个客户端来进行测试。在这个场景中,"ejabberd ...
作为一款开源软件,ejabberd遵循GPLv2许可证,允许用户自由地使用、修改和分发源代码,从而鼓励社区参与和定制化。 ejabberd是由Erlang/OTP编程语言开发的。Erlang是一种高度并发、分布式、面向过程的语言,非常...
IM(ejabberd)服务器的客户端android开发的代码详解,该代码例子包含单聊、群聊、发送文字、发送及接收文件等功能。
3. **配置**:ejabberd的配置文件通常为ejabberd.yml,你需要根据实际需求进行编辑,如设置监听端口、数据库连接、认证方式等。 4. **启动和管理**:使用ejabberd的控制脚本启动服务器,并通过命令行工具管理服务器...
为了修复这些问题,开发者需要深入研究XEP-0016规范,并对比ejabberd源代码,确保所有操作都符合标准。此外,进行详尽的测试,包括与其他XMPP服务器和客户端的互操作测试,是至关重要的。 在进行源码分析时,可以...
ejabberd stan ack v0.6 当ejabberd服务器已收到您的消息时,此模块将向您的发件人发送... 使用以下命令将已编译的.beam文件移动到ejabberd的ebin文件夹(例如/ lib / ejabberd / ebin): mv mod_stanza_ack.beam /
在其中指定源代码路径、编译选项、库依赖等。例如,你可能需要包含`src`目录,并链接到必要的系统库如`log`、`dl`等。 4. **设置NDK编译**:使用Android Studio的命令行工具或直接在`build.gradle`文件中配置NDK...
本文件主要关注的是如何在iOS平台上使用XMPP与ejabberd服务器进行集成,实现即时通讯功能。 ejabberd是一款开源的XMPP服务器,支持多种平台,包括iOS。它提供了强大的可扩展性和高可用性,能够处理大量的并发用户,...
本项目“Android IM开发 Ejabberd+asmck+spack”提供了一套完整的解决方案,包括服务器端、Android客户端以及PC端客户端。 **Ejabberd服务器** Ejabberd是一款开源的XMPP(Extensible Messaging and Presence ...
ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...
在 ejabberd_rest_client-master 压缩包中,包含了ejabberd_rest_client的源代码、示例、测试和文档,可以帮助你快速理解和使用这个库。通过阅读源代码和示例,你可以了解到如何构建请求,以及如何处理各种API操作...
在压缩包子文件的文件名"ejabberd-2.1.10-mac-intel-installer.app"中,我们看到"mac-intel",表明这是为Mac上的Intel处理器编译的版本。".app"是Mac OS X中的应用程序包装格式,意味着解压后可以直接运行,符合描述...