仅使用一个端口将两台服务器设计在一起
Design two servers together using only one port
我是使用服务器的新手,我有一个服务器设计问题。我目前有两个独立的应用程序服务器,它们以下列方式协同工作:
初始连接是与 server1 建立的,它做出一些决定(关于端口号和其他参数)并在同一台机器上使用这些参数启动 server2(我可以访问所有创建的进程句柄) .所有进一步的请求都直接来自每个客户端的每个服务器 2。由于我们正在处理的数据,每个客户端都需要单独版本的 server2。 (我们的负载不大,所以这从来都不是问题)
问题是选择的端口号。他们并不总是对我们的客户开放。所以我的问题是我如何重新设计这个系统,这样我仍然有单独版本的 server2,但是所有请求都通过 server1 来来去去,所以只有它的端口在外部使用(所有端口都在机器内部可用,服务器是 运行上)?例如,是否有可能使两台服务器 'talk' 以某种方式相互连接,也许让一台服务器重定向到另一台服务器?如果我尝试这样做,多个客户端的 TCP 规范会变得相同吗?是否有可能完全做到这一点,或者我是否必须重新考虑整个系统?
(如果这很重要,两个服务器都是用 c++ 编写的,完全按照 Poco 库在其文档中的建议)
我不需要特定的代码,只需要一些关于存在哪些可能性的指南。任何帮助和建议将不胜感激。
不确定您在这里处理的是什么协议,但在我看来您需要一台服务器 (server1) 提供两种服务,例如 "hello" 和 "data exchange"。然后 server1 应该能够识别它正在接收的传入连接的类型,以及它必须将它发送到哪里。如果您需要为每个客户制定单独的流程,您有几种可能性。一个简单的方法是为每个新的数据交换连接创建一个新进程(我在这里用的是 Unix 术语,但对于 Windows 也是可能的,参见 this question). However, that may be too much overhead, and instead you may prefer to have long-lived per-client server2 instances. In that case, one option is to have server1 to act as a proxy, forward the client request to the corresponding server2 through a local/Unix socket or some other IPC mechanism (in this architecture it may make sense to use the Reactor framework in Poco); this, however, ultimately requires all the data from all clients to go through server1, which may have been the reason to split the problem in multiple processes in the first place. So the option that you have is to duplicate the client open connection socket in the server2 process (and then close the one in server1). Read this and this questions about how to do it on Unix, or this documentation 的 Windows(我'我不知道 Poco 抽象来做这件事,但话又说回来,我对 Poco 知之甚少。
我是使用服务器的新手,我有一个服务器设计问题。我目前有两个独立的应用程序服务器,它们以下列方式协同工作:
初始连接是与 server1 建立的,它做出一些决定(关于端口号和其他参数)并在同一台机器上使用这些参数启动 server2(我可以访问所有创建的进程句柄) .所有进一步的请求都直接来自每个客户端的每个服务器 2。由于我们正在处理的数据,每个客户端都需要单独版本的 server2。 (我们的负载不大,所以这从来都不是问题)
问题是选择的端口号。他们并不总是对我们的客户开放。所以我的问题是我如何重新设计这个系统,这样我仍然有单独版本的 server2,但是所有请求都通过 server1 来来去去,所以只有它的端口在外部使用(所有端口都在机器内部可用,服务器是 运行上)?例如,是否有可能使两台服务器 'talk' 以某种方式相互连接,也许让一台服务器重定向到另一台服务器?如果我尝试这样做,多个客户端的 TCP 规范会变得相同吗?是否有可能完全做到这一点,或者我是否必须重新考虑整个系统?
(如果这很重要,两个服务器都是用 c++ 编写的,完全按照 Poco 库在其文档中的建议)
我不需要特定的代码,只需要一些关于存在哪些可能性的指南。任何帮助和建议将不胜感激。
不确定您在这里处理的是什么协议,但在我看来您需要一台服务器 (server1) 提供两种服务,例如 "hello" 和 "data exchange"。然后 server1 应该能够识别它正在接收的传入连接的类型,以及它必须将它发送到哪里。如果您需要为每个客户制定单独的流程,您有几种可能性。一个简单的方法是为每个新的数据交换连接创建一个新进程(我在这里用的是 Unix 术语,但对于 Windows 也是可能的,参见 this question). However, that may be too much overhead, and instead you may prefer to have long-lived per-client server2 instances. In that case, one option is to have server1 to act as a proxy, forward the client request to the corresponding server2 through a local/Unix socket or some other IPC mechanism (in this architecture it may make sense to use the Reactor framework in Poco); this, however, ultimately requires all the data from all clients to go through server1, which may have been the reason to split the problem in multiple processes in the first place. So the option that you have is to duplicate the client open connection socket in the server2 process (and then close the one in server1). Read this and this questions about how to do it on Unix, or this documentation 的 Windows(我'我不知道 Poco 抽象来做这件事,但话又说回来,我对 Poco 知之甚少。