2009-02-16 54 views
0

我们有一个字符串处理服务(C++,使用标准输入/输出为输入/输出),其具有不同的布局,每个布局单独运行(最终将在单独的机器上运行),每个布局需要加载时间,这就是为什么它必须在第一次运行后继续运行。实施客户端 - masterserver/slaveserver应用程序Java

我必须实现与客户端系统将要求主服务器将其连接到其实际运行相关的布局服务相关的从属服务器。从服务器将传送从客户端传送到服务的数据,并在主服务器上为其他客户端完成后可用。

问题是要实现服务器的最佳方式是什么?我应该在slave/master之间保持一个开放的连接,直到进程完成以通知主机连接已经结束,或者在同步函数中保存某种var以检查它吗?

其他重要输入(或其他设计),我忽略了,也很欢迎,感谢名单!

回答

0

假设你不能替换C++的东西,这里是我将如何去做我的头顶。

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

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

我不会刻意保持开放连接(除了奴隶,根据您的描述的C++程序之间)。在这个过程中,只需使用网络请求就可以在主进程和副进程之间保持连接,但这不应该成为问题。这样你就不用担心这个细节。现在

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

我希望这会有所帮助。

0

根据您的可扩展性的需求,你可能想看看的Java NIO package。这将为您创建一个可扩展的非阻塞服务器实现的起点。