ejabberd学习2

1.ejabberd监听多个端口

每个网络连接进来,ejabberd都会使用一个进程来负责这个连接的数据处理。原理跟Joe Armstrong的《Erlang程序设计》中的并行服务器一样,就在P196,大家可以看看。

相比于Joe的例子,ejabberd的代码更具有扩展性。在ejabberd_listener.erl文件中,start/3函数会根据要调用的模块的socket_type来启动相关的必备资源。在这个文件里面,假设是tcp连接,调用过程是,start/3 -> start_dependent/3 -> init/3 -> init_tcp/6 -> accept/3 ,最后可能会调用ejabberd_frontend_socket或者ejabberd_socket里面的start/4函数。

在ejabberd_socket.erl文件中,还是会根据要调用的模块的socket_type来调用相关的函数。最后会调用模块里面的start/2函数,正常返回{ok, Pid}.一路看下来,参数中有端口,处理网络连接的模块名,连接时的选项。知道这些就可以轻松配置网络连接。

所以在处理网络连接时,要监听多个网络端口,可以考虑一下ejabberd_listener模块。具体的代码可以参考mod_proxy65_stream.erl。

2.在ejabberd的master库中,自己写的behavior模块,behavior_info函数给注释掉了,难道不需要导出behavior_info函数了吗?这个特性是在什么时候开启的?

转贴请注明来自:格通

原文地址:https://www.cnblogs.com/getong/p/3327474.html