Asynchronous Method Invocation (AMI)是客户端的异步编程模型。和同步请求不同,AMI不会堵塞他所在的线程。对于服务器端来说,同步和异步请求是没有什么区别的。
基本异步API
看下边的SLICE定义,使用slice2cpp生成.h,.cpp文件。
module Demo {
interface Employees {
string getName(int number);
};
};
除了同步方法,他还生成了异步方法,如下:
EmployeesPrx e = ...;
Ice::AsyncResultPtr r = e->begin_getName(99);
// Continue to do other things here...
string name = e->end_getName(r);
可以用begin_getName发出调用,之后用end_getName取回结果。如果执行end_getName时,服务器还未执行完getName请求,则客户端会堵塞,直到服务器的调用完成。如果服务器已经执行完getName,则客户端的end_getName会立即返回结果。
如下:
EmployeesPrx e = ...;
Ice::AsyncResultPtr r = e->begin_getName(99);
// Continue to do other things here...
<