0

我们有一个具有不同布局的字符串处理服务(c++,使用标准输入/输出),每个布局单独运行(最终将在不同的机器上运行),每个布局都需要时间来加载,这就是为什么它必须在之后继续运行首轮。

我必须实现一个带有客户端的系统,该系统将要求主服务器将其连接到实际运行相关布局服务的相关从属服务器。从服务器将从客户端传递的数据传递给服务,完成后将在主服务器上可供其他客户端使用。

问题是实现服务器的最佳方式是什么?我应该在从属/主控之间保持开放连接,直到该过程完成以通知主控连接结束,还是在同步函数中保留某种 var 来检查?

我忽略的任何其他重要输入(或其他设计)也非常受欢迎,谢谢!

4

2 回答 2

0

假设你不能替换 C++ 的东西,这就是我会怎么做的。

我会设置一台主服务器。该服务器将运行一个接受请求的进程(可能通过 HTTP,所以它是一个 Web 服务),我会让它读取请求,解析它是什么,然后调用正确的从属服务器。基本上它充当代理。一旦它收到来自从属的响应,它就会将其转发回调用者。这里的简单性意味着如果您开始收到更多的一种类型的请求,您可以为该请求设置额外的服务器并对它们进行循环请求。

从站将是打开 C++ 程序并转发输入和检索输出的 Web 服务。这就是它所做的一切。

我不会费心保持打开的连接(根据您的描述,从属和 C++ 程序之间的连接除外)。只需对这些东西使用网络请求就可以在此过程中保持主从之间的连接打开,但这应该不是问题。这样您就不必担心这个细节。

现在,如果我是你,我会认真考虑用 Java 重新实现 C++ 代码或通过 JNI 或其他方式调用它。如果你可以避免它,我认为避免围绕 C++ 的 Java 包装器将是一个很好的设计目标。Java 可以在启动期间执行任何昂贵的过程,然后像 C++ 代码一样在内存中准备好东西。

我希望这有帮助。

于 2009-02-16T16:08:07.093 回答
0

根据您的可伸缩性需求,您可能需要查看Java NIO 包。这将为您提供构建可扩展、非阻塞服务器实现的起点。

于 2009-02-16T16:24:04.700 回答