单程服务方式
Oneway service methods
请告诉我,声明两种方法有什么不同
service MyService {
void test1();
oneway void test2();
}
手册说
The oneway modifier indicates that the client only makes a request and does not wait for any response at all. Oneway methods MUST be void.
但是任何无效的方法都表示客户端不期望任何结果。那为什么oneway
?
或者区别是普通方法同步执行,客户端returns只有方法在服务端测试过,oneway被pull忘记了?结果,单向不能出现异常
你最后的假设是准确的!
引用 The Programmer's Guide to Apache Thrift:
"单向函数与普通函数的区别在于调用普通函数,例如“void myFunc( 1: i16 val );”总是导致来自服务器的响应消息。这在 void 函数的上下文中可能看起来很奇怪,但是,虽然 void 函数在应用程序级别没有 return 任何东西,但处理器确实将 RPC 响应发送回客户端代理。当此响应到达客户端代理 return 时,来自用户代码在同步接口中进行的调用。这种同步的一个原因是任何正常函数都可能抛出异常,甚至是 void 函数。用户代码必须等待服务器响应才能知道函数(即使是 void 函数)已成功完成。
因为单向函数不接收任何类型的响应,所以单向函数调用者不可能知道调用何时或是否完成。在客户端需要通知服务器而不考虑结果的情况下,oneway 是一个不错的选择。 Onway 函数可以像任何其他函数一样具有参数,但应声明为 void(IDL 编译器警告非 void oneway return 类型并且永远不会 return 向 oneway 调用的客户端发送任何内容)。” =11=]
But any void method says that the client does not expect any results. Then why oneway?
因为那个特定的假设是错误的。
比较这个:
service Foo {
void bar() throws(1: SomeException ex)
}
有了这个:
service Foo {
oneway void bar()
}
你能找出区别吗(除了 oneway 关键字)?
即使是 void
方法仍然可以 return 一些东西:异常。
oneway
不是这种情况:这里的例外是设计不允许的,因为 oneway
可以翻译为 "fire and forget"。
请告诉我,声明两种方法有什么不同
service MyService {
void test1();
oneway void test2();
}
手册说
The oneway modifier indicates that the client only makes a request and does not wait for any response at all. Oneway methods MUST be void.
但是任何无效的方法都表示客户端不期望任何结果。那为什么oneway
?
或者区别是普通方法同步执行,客户端returns只有方法在服务端测试过,oneway被pull忘记了?结果,单向不能出现异常
你最后的假设是准确的!
引用 The Programmer's Guide to Apache Thrift:
"单向函数与普通函数的区别在于调用普通函数,例如“void myFunc( 1: i16 val );”总是导致来自服务器的响应消息。这在 void 函数的上下文中可能看起来很奇怪,但是,虽然 void 函数在应用程序级别没有 return 任何东西,但处理器确实将 RPC 响应发送回客户端代理。当此响应到达客户端代理 return 时,来自用户代码在同步接口中进行的调用。这种同步的一个原因是任何正常函数都可能抛出异常,甚至是 void 函数。用户代码必须等待服务器响应才能知道函数(即使是 void 函数)已成功完成。
因为单向函数不接收任何类型的响应,所以单向函数调用者不可能知道调用何时或是否完成。在客户端需要通知服务器而不考虑结果的情况下,oneway 是一个不错的选择。 Onway 函数可以像任何其他函数一样具有参数,但应声明为 void(IDL 编译器警告非 void oneway return 类型并且永远不会 return 向 oneway 调用的客户端发送任何内容)。” =11=]
But any void method says that the client does not expect any results. Then why oneway?
因为那个特定的假设是错误的。
比较这个:
service Foo {
void bar() throws(1: SomeException ex)
}
有了这个:
service Foo {
oneway void bar()
}
你能找出区别吗(除了 oneway 关键字)?
即使是 void
方法仍然可以 return 一些东西:异常。
oneway
不是这种情况:这里的例外是设计不允许的,因为 oneway
可以翻译为 "fire and forget"。