前言
分布式锁需要考虑很多事情,第一网络是否正常,第二个提供分布式锁这台机器的高可用性。
一、网络模块封装
明线
io检测部分的接口:
-
添加读事件是因为当有客户端连接事件来临时,我们好去处理这个事件。
-
写事件这是因为当我们服务端作为客户端去连接第三方服务时候,需要注册写事件。
-
删除事件就比如关闭连接时,我们需要将事件从检测模块中删除。
-
修改事件就比如当客户端发来事件我们需要检测读事件,但是接收失败了我们要把读事件修改为注册写事件进行反馈。
-
检测事件肯定是必须的啦!io操作: 绑定监听,接收连接,建立连接,关闭fd,读,写,fd属性。
暗线
需要注意的是:fd类型中clientfd写事件触发的情况,服务器收到客户端的数据可以直接调用write()函数,只有当写入失败时才要注册写事件,检测何时可写。应该将发送失败的数据缓存起来,等事件可写了,再将缓冲区的数据进行发送。
断开连接或者错误,都是交给读写操作。
二、协程调度
没有协程之前,当成功接收到一个数据后,要调用多个回调函数,(解析数据、查库拿数据、返回给客户端)等等。现在我们考虑的是,将三个序列利用协程的方式进行粘合,三个回调变成一个协程回调执行序列。
为每一个fd执行一个序列,每个协程是一个执行序列。
lua虚拟机不支持协程,并且没有类似于pthread_create()函数,也就是说主协程被自动创建。lua虚拟机同时只能有一个协程在运行。主协程负责调度其他协程。
主协程会进行事件检测,不断地从epoll中去取事件,根据事件去唤醒