1

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

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

我最初对这个问题的看法是,在分离模式下创建一个单独的线程。向客户发送您的请求已被接受的响应。在线程中生成一个任务,该任务将继续在 UI 中报告进度。

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

4

1 回答 1

0

这些天通常的模式似乎是在单独的线程中运行阻塞 IO,然后使用在主线程上运行的回调/观察者。这种模式与在主线程上运行所有 GUI 工作的现代最佳实践相得益彰。

编辑:

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

澄清...

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

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

真的是一样的想法。

有很多变体,尤其是对于服务器端。重点通常是为了节省资源并避免重复工作,因此您希望限制允许的线程数,并且您可能希望重新使用它们(“线程池”)。

至于究竟如何在 C++ 中做到这一点,这不是一个容易回答的问题。像 C# 和 Java 这样的现代语言有一种明确定义的方式来做到这一点,但 C++ 在这方面是不可知的。没有“C++”答案,但会有“C++ on Windows”答案。不是 Windows 的人,我在这里帮不了你。

于 2013-10-14T12:38:10.457 回答