Java 在C+中使同步调用异步+;

Java 在C+中使同步调用异步+;,java,web-services,asynchronous,client-server,Java,Web Services,Asynchronous,Client Server,情况是这样的。客户端是用java开发的,服务器是C++(Windows平台)。以请求和响应方式使用服务调用进行通信。但是这些调用是同步的。客户端发出请求调用,服务器处理请求并发送响应。在此之前,客户端被阻止 提供了可用于在客户端UI中报告进度的任务。这消除了客户端等待服务器响应的需要 我对这个问题的最初理解是,在分离模式下创建一个单独的线程。向客户端发送响应,告知您的请求已被采纳。在线程中生成一个任务,该任务将在UI中不断报告进度 但问题是,从长远来看,这是最好的方法吗?或者应该有一个基础性的工

情况是这样的。客户端是用java开发的,服务器是C++(Windows平台)。以请求和响应方式使用服务调用进行通信。但是这些调用是同步的。客户端发出请求调用,服务器处理请求并发送响应。在此之前,客户端被阻止

提供了可用于在客户端UI中报告进度的任务。这消除了客户端等待服务器响应的需要

我对这个问题的最初理解是,在分离模式下创建一个单独的线程。向客户端发送响应,告知您的请求已被采纳。在线程中生成一个任务,该任务将在UI中不断报告进度


但问题是,从长远来看,这是最好的方法吗?或者应该有一个基础性的工作来实现异步涅磐?

现在通常的模式似乎是在一个单独的线程中运行阻塞IO,然后使用在主线程上运行的回调/观察程序。这种模式与在主线程上运行所有GUI工作的现代最佳实践很好地结合在一起

编辑:

对不起,错过了服务器是C++的。 为了澄清

在客户端,您将有两个线程。GUI和交互的主线程,以及连接时产生的通信线程。这两个线程将使用观察者设计模式的一些变体进行通信,这意味着“回调”或实际的观察者。这允许主线程在不冻结GUI的情况下继续。确保当通信线程调用时,调用以某种方式被调度到主线程

在服务器端,通常会有一些相同模式的变体。将有一个主线程侦听连接,然后为创建的每个连接生成一个线程(或进程)。通信线程将与会话一样有效。这允许通信线程执行阻塞调用,而不会阻止主线程接受新连接

这是同样的想法,真的

有许多变体,特别是对于服务器端。这一点通常是为了节省资源和避免重复工作,因此您需要限制允许的线程数量,并且可能需要重复使用它们(“线程池”)


关于如何在C++中精确地进行这一问题,这不是一个容易回答的问题。现代语言如C++和java有一个明确的方法来实现这一点,但是C++在这方面是不可知的。没有“C++”答案,但会有“Windows上的C++”答案。我不是一个Windows操作系统的人,在这里我真的帮不了你。

你如何跟踪进度?通过单独的回调?还是说一个大任务被分成了许多小任务,这些任务都被计算在内了?@Fildor在服务器端,我生成了一个受框架支持的任务对象,它使用它的进度更新方法显示进度。好的,然后你可以使用ExecutorService和Callables…@Fildor感谢大家的提醒。“我会调查的。”DivyangPatel客户方。如果要引入异步服务器调用,则需要完全不同的体系结构和API。