AMI(Asynchronous Method Invocation)用来描述客户端支持异步编程模型。AMI支持单向和双向请求并且不会阻塞。
当客户端发起AMI请求时,ICE将消息放到传输队列后,应用就可以执行下面的代码。当请求结束时,应用会接到回调。
AMI对于服务器是透明的,对于服务器来说,同步请求和异步请求都是一样的。
一.基本异步API API
Basic Asynchronous API in JavaScript
module
Demo {
interface
Employees {
string
getName(
int
number);
string
getAddress(
int
number);
};
};
1.异步方法 Asynchronous Proxy Methods in JavaScript
生成js异步方法如下
EmployeesPrx.prototype.getName = function(number, __ctx) { ... }
EmployeesPrx.prototype.getAddress = function(number, __ctx) { ... }
方法的名字是一样的。
所有的异步方法,都返回一个Ice.AsyncResult类型的值。
2.传递参数 Passing Parameters in JavaScript
下边的Slice中,传递的参数有多种类型:
struct
NumberAndString {
int
x;
string
str;
};
sequence
<
string
> StringSeq;
dictionary
<
long
, StringSeq> StringTable;
interface
ClientToServer {
void
op1(
int
i,
float
f,
bool
b,
string
s);
void
op2(NumberAndString ns, StringSeq ss, StringTable st);
void
op3(ClientToServer* proxy);
};
生成的JS代码如下
ClientToServerPrx.prototype.op1 =
function
(i, f, b, s, __ctx) { ... }
ClientToServerPrx.prototype.op2 =
function
(ns, ss, st, __ctx) { ... }
ClientToServerPrx.prototype.op3 =
function
(proxy, __ctx) { ... }
传递参数如下
var
p = ...;
// Get ClientToServerPrx proxy...
p.op1(42, 3.14,
true
,
"Hello world!"
);
// Pass simple literals
var
i = 42;
var
f = 3.14;
var
b =
true
;
var
s =
"Hello world!"
;
p.op1(i, f, b, s);
// Pass simple variables
var
ns =
new
NumberAndString();
ns.x = 42;
ns.str =
"The Answer"
;
var
ss = [];
ss.push(
"Hello world!"
);
var
st =
new
StringTable();
st.set(0, ss);
p.op2(ns, ss, st);
// Pass complex variables
p.op3(p);
// Pass proxy
3.空指针Null Parameters in JavaScript
Slice中的一些类型可以定义为null,比如序列,字典,字符串,但null对这些类型来说并没有语义,和空是一样的。所以,当ICE 运行时要发送一个值为null的序列,字典,