在配置文件ejabberd.cfg的listen配置项里,可以配置监听模块
由ejabberd_listener.erl负责启动监听
1、客户端的连接
生成一个套接字以后,由ejabberd_c2s.erl调用
ejabberd_frontend_socket:start
ejabberd_receiver:start 生成一个gen_server处理套接字数据
在ejabberd_receiver中
handle_info({Tag, _TCPSocket, Data},负责处理接收到数据
ejabberd_receiver:process_data
% 解析接收到的数据
fxml_stream:parse,在解析的过程中,会发送消息给本进程,由
process_data([Element | Els],
#state{c2s_pid = C2SPid} = State)
when element(1, Element) == xmlel;
element(1, Element) == xmlstreamstart;
element(1, Element) == xmlstreamelement;
element(1, Element) == xmlstreamend ->
进行处理,将解析得出的XML数据发送给客户端进程
gen_fsm:send_event(C2SPid, element_wrapper(Element))