当完成一个系统需要提供给第三方使用的时候,如何让第三方更好的使用呢?我们通常会提供一个库以及一个头文件(接口说明);如果第三方不仅需要同步调用接口同时又需要异步调用的接口,那么其实一个API库的实现还是比较复杂的。
同步调用: 调用后等待它返回;
异步调用: 调用后立即返回,待稍后去查询是否完成;
同步API库比较容易实现,谈谈异步API库的实现:
提供给调用者的接口:
1) 调用者调用接口 --- Add_Task,并得到Task的标识ID;
2) 在一定的时候去探询任务是否完成 --- Task_Poll;
API库的实现:
1) 调用者进行API初始化,启动后端处理线程,线程处于条件等待状态;
2) 调用者调用放入任务的接口,任务放入队列中,并返回Task的Id,并唤醒线程;
3) 后端线程去取队列中的任务,进行“处理” ---- 本地处理 ; 远端的网络处理(多路复用)
4) 处理完后,将结果再放回到队列中
5) 调用者通过探询来取回已经完成的Task
备注:
线程换成进程;队列采用是双通道IPC的方式;
UDP包: 每个包需要一个Seq标识,用来回包时找到Task;
TCP包: 如果每个Socket不共用的话,则不需要Seq标志,通过socket --> _flow_no --> Task;
如果每个Socket共用的话,则需要Seq标识