mochiweb运行总体流程
自定义模块start/1函数调用mochiweb_http:start([{name, ?MODULE}, {loop, ?LOOP},{port,Port])启动整个项目
1 启动mochiweb_socket_server进程,并将该进程转化为系统进程,作为各子进程的监控进程
2 创建进程池,挂载多个accept进程,并将各进程pid存入连接池(accept_pool),通过记录#mochiweb_socket_server{}维护
3 挂载的accept进程等待用户连接,若存在用户连接,则立即向mochiweb_socket_server进程发送accepted消息,并建立连接,然后以mochiweb_http:loop/3为入口接收http请求并调用自定义模块处理请求响应用户
4 mochiweb_socket_server进程接收到accepted消息,立即调整#mochiweb_socket_server{}记录信息,将其中active_sockets+1,并将其进程pid从acceptor_pool中移除,最后在创建一个新的acceptor进程,维持当前挂载的acceptor进程数稳定
5 Socket连接断开,若断开异常则向监控进程mochiweb_socket_server发送异常信息,监控进程首先查看该进程pid是否存在acceptor_pool中,若存在则编写错误日志,否则直接调用mochiweb_socket_server:recycle_accceptor/2更新#mochiweb_socket_se