首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从单个客户端调用对Thrift Service的多个异步请求

从单个客户端调用对Thrift Service的多个异步请求
EN

Stack Overflow用户
提问于 2019-06-23 13:52:50
回答 1查看 974关注 0票数 0

对于我的代码,需要从同一个客户端向Thrift服务调用多个异步请求。

因此,我使用非阻塞服务器和异步客户端(请参阅下面的代码)来允许异步调用,这意味着代码在第一次调用"checkForPrime()“方法(我在Thrift Service上调用该方法)后继续执行。现在,这似乎只在执行一个调用时起作用。如果我在之后立即进行第二次异步调用,我会收到以下错误消息:

代码语言:javascript
复制
Client is currently executing another method: 
Interfaces.PrimeCheck$AsyncClient$checkForPrime_call
    at 
org.apache.thrift.async.TAsyncClient.checkReady(TAsyncClient.java:78)
    at 
Interfaces.PrimeCheck$AsyncClient.checkForPrime(PrimeCheck.java:110)
    at ThriftClient.main(ThriftClient.java:40)

我需要一个智能的解决方案,以允许多个呼叫,但它必须来自同一客户端。欢迎提出任何建议。如果您需要更多信息,请不要犹豫。

代码语言:javascript
复制
        org.apache.thrift.protocol.TBinaryProtocol.Factory factory = new TBinaryProtocol.Factory();
        TAsyncClientManager manager;
        TNonblockingSocket socket;
        AsyncClient client;
        try {
            manager = new TAsyncClientManager();
            socket =new TNonblockingSocket("localhost", 4711);
            client = new AsyncClient(factory, manager, socket);
            client.checkForPrime(5, resultHandler);
            client.checkForPrime(7, resultHandler);
            Thread.sleep(100);
        } catch (IOException e2) ....
EN

回答 1

Stack Overflow用户

发布于 2019-06-26 04:51:23

允许异步调用的

,这意味着代码在第一次调用"checkForPrime()“方法后继续执行,

不完全是。Asynchronous只意味着 和你不必等到必要的时候才完成

这并不意味着你可以使用同一个客户端来做另一个并行请求。意味着你可以使用同一个客户端来做另一个并行请求。一些实现可能支持这一点,但当前的实现不支持。

多个未完成的呼叫需要一些记账,否则您将迷失在响应中:

代码语言:javascript
复制
 call 1 made --->
 call 2 made --->
 response arrives <----
 response arrives <----

现在,第一个响应属于哪个呼叫:呼叫1还是呼叫2?很难说,它可能是其中之一。如果没有更多的信息,多呼叫客户端将很难尝试关联数据。

TAsyncClientManager通过将客户端限制为一次仅允许一个挂起的呼叫来处理此问题。

需要从同一客户端调用多个异步请求

你为什么认为这是必要的?

客户端只是一个中介者,一种传输方式。如果您发送两封电子邮件,您是否要求这两封电子邮件在interwebs上遵循完全相同的路径?不是,因为对方(服务器)应该依赖的相关信息是在消息内容中,而不是在传输级别。

但是,如果您需要在客户端存储数据,则应将其存储在客户端实例外部的专用位置。无论哪种方式,我们处理一个或两个客户端实例的事实都不应该真正重要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56721394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档