初识OTP
OTP,即电信开放平台,第一次见这个词还以为与电信通信相关,有一定的误导性,但在学习了解之后才明白OTP其实是一个通用性非常强的应用程序操作系统。
通过对OTP的了解,其gen_server模块非常像我早期学习linux服务器开发时了解的一款开源网络框架lib_event(代表软件NetChat),不过在踏上这条崭新的道路之后,依然需要从最简单的做起,去了解背后具体的构建逻辑,本文旨在分享笔者在学习gen_server过程中所做的代码实践,以及分享遇到的一些问题以及笔者在学习过程中的一些思路和感谢。
通用服务器之路——搭建最基本的服务器
想一想曾经我所写过的lib_event服务器,其最主要的业务是处理用户的地理信息,接受用户请求,经过服务器处理数据,发送给数据库服务器,返回结果给用户,从中我们能抽象出一个服务器最最基本的要素——收发信息,业务处理以及启动和停止。
现在我们用erlang来编写一个最最简单的服务器,他的功能是存储用户上一次传入的位置
如你所见 这是一个服务器最最简单的结构,
start:负责启动一个注册名为Name的进程,这个进程拉起一个loop服务,但是目前启动的服务器还没有业务功能,需要我们传入一个Mod给这个服务器添加业务,这意味着我们不需要了解服务器的构造与细节,不需要改变loop,仅仅只是传入回调模块即可实现业务以及拓展功能(OTP简直是天才设计)。
rpc:远程过程调用,因为我们实现业务的代码其实不在本服务器上(本服务器只是一个架构),所以我们需要通过远程调用,去调用真正执行业务的服务器!
loop:服务器的本体,一个循环执行的函数,其功能是持续监听发给本服务器的请求,处理后循环自身,更新状态。
真正执行业务的服务器,主要功