1.概念:
gen_event是OTP四大行为之一,是一种对事件的抽象,也是基于匹配回调的模式,它比gen_server更加灵活,因为它可以随意添加回调模块,而且它不会因为无法匹配而崩溃,它会把它丢给terminate,直接输出,但因为他会遍历每个回调模块,所以它的时间复杂度肯定会比gen_server更高。
2.基本函数:
1.start() -> Result
start(EventMsg|Option) -> Result
start(EventMsg,Option) -> Result
start()用于申请一个gen_event服务器的进程,Event有{local,Name}和{global,Name},前者是建立一个本地的进程,后者建立一个全节点都能访问的全局服务器,Name其实就是这个进程名,它必须是唯一的。
2.start_link() -> Result
start_link(EventMsg|Option) -> Result
start_link(EventMsg,Option) -> Result
start_link和start不同在于,它是在创建监察者树的时候调用的是前者,为什么呢?那就要讲到一些监察者树的特性了,监察者树用于监察进程,若进程出现错误而崩溃,监察者速能快速重启,监察者树有一种模式,就是其中一个进程崩溃,其他模式要一起重启,所以需要link来连接他们,让他们联系在一起,当然,这是个人推测。
3.call(A, B, C) -> Result
call(A,B) -> Result
发送一个同步请求到服务器,它与服务器的handle_call/2匹配,C可以设为超时时间,若超过这个时