AMPS一个中间件,它提供了一个框架,用于构建任何一个事件驱动的,异步处理的应用。与传统的基于线程的实现,AMPS允许单线程的方法,执行高并发应用程序。
AMPS is a middleware that provides a framework to write any software application as an event driven, asynchronous process . Unlike conventional thread based implementations, AMPS allows highly concurrent applications to run as a single thread of execution.
AMPS实现要求,应用被设计成有限状态机的模型,状态的改变是基于事件的,每个状态的改变都要求有事件处理程序。一旦这样的设想,实现能提供多重好处。
AMPS implementations require that the application be modelled as a FSM (Finite State Machine) that changes state based on ‘events’. ‘Event handlers’ are written for each state change. Once envisioned in this way, implementations provide multiple benefits.
本编程模型的好处有:
Some of the benefits of this programming model are:
Products developed on AMPS(基于AMPS开发的产品) |
上节看了AMPS中通过数组+单链表实现的内存池,本节看看另一个实现方式。此方法思路如下:其内存池结构为一个存放已分配内存信息的双链表,一个表示内存池大小的变量,一个指向当前内存链表结点的指针链表,如下: /*内存池结构*/ struct _newMMContext { t_AMPSDList* memBuffList; /*结点链表*/ int nSizeOfBuff
在AMPS中,使用内存池来管理内存,具体机制见之前的文章《AMPS:内存管理(二)》,在代码中,使用了两种实现方式,第一种是数组+单链表。今天先看看这个方式下的内存池实现。 AMPS_MemoryMgt.h #ifndef __HEADER_AMPS_MEMORY_MGMT_H__ #define __HEADER_AMPS_MEMORY_MGMT_H__ #include "AMPS_De
Timer模块的实现比较复杂,需要结合前面的文章《AMPS:定时器管理》才能有所理解,下面看看AMPS中的定时器实现,有些细节方面我也没有想清楚。 AMPS_Timer.h #ifndef __HEADER_AMPS_TIMER_H__ #define __HEADER_AMPS_TIMER_H__ #ifdef __cplusplus extern "C" { #endif #
这里讲的Cache并不是通常说的计算机存储系统中的高速缓存,而是软件层面的缓存,它的做用主要是为了提高数据处理的效率。在AMPS中,Cache的结构如下: /*Cache结构*/ struct _AMPSCache { void* pvHASHTable; /*Hash表,用于查找*/ void* pvHeap; /*堆,用于增删改*/ int nCacheSize;
看看AMPS中的日志模块,有两种写日志的方法,一是直接使用封装好的API函数写,另一种是通过应用层注册的日志回调函数,利用事件管理机制来写。 AMPS_Log.h #ifndef __HEADER_AMPS_LOG_H__ #define __HEADER_AMPS_LOG_H__ #include <stdio.h> #include "AMPS_SystemAPI.h" #inclu
队列概念很简单,就是排队,先进先出,通常有链表形式和数组形式(即链接类型和顺序类型),它也是软件构建的一个基本数据结构,看看AMPS中的队列实现。 AMPS_Queue.h #ifndef __HEADER_AMPS_QUEUE_H #define __HEADER_AMPS_QUEUE_H #ifdef __cplusplus extern "C" { #endif #include
本节看看AMPS中对Oracle数据库进行操作的方法,使用的是Oracle的C访问接口OCI,关于OCI各函数的中文说明可参考这篇文章http://www.cnblogs.com/joeblackzqq/archive/2011/04/24/2026461.html 下面看看AMPS中Oracle操作各函数实现: AMPS_Oracle.h #ifndef __HEADER_AMPS_DB
AMPS做为一个中间件,也提供了访问数据库的接口,目前支持MySQL和Oracle(对我所喜爱PostgreSQL却默认不支持,看来我的爱好属于非主流哈~),下面要看的是DBEngine库,它只做一件事情,就是封装了不同数据库操作的差异,提供一个数据库统一访问接口。下节再看针对不同数据库的具体操作。 AMPS_DBEngine.h #ifndef __HEADER_AMPS_DB_ENGINE
异步Tcp客户端 异步Http客户端 异步Redis客户端 异步Mysql客户端 异步Log日志 异步文件读写 异常Exception
【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。
【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。
【注意】Azure SQL Database 不支持服务器角色。 在“成员”选项卡,指定已选择的登录成为此服务器角色的成员。
异步Log日志 use AsyncLog; yield AsyncLog::info('hello world'); yield AsyncLog::debug('test debug', ['foo' => 'bar']); yield AsyncLog::notice('hello world',[], 'group.com'); yield Async
异常Exception 以传统的try,catch抓取异常 如果在业务层不catch,框架层会捕捉,并返回一个500的server error响应。 如果在开发环境会返回一个500的具体错误的trace响应。 try { throw new \Exception("Error Processing Request", 1); //yield throwExc