sockets - 多个 TCP/IP 服务器并共享同一个 "well known port"......不知何故?

标签 sockets client-server sharing ports

我为奇怪的问题措辞道歉......这是设计问题:

我正在开发一个服务器(在 Linux 上使用 C++,FWIW),它为在消费者 PC 上运行的客户端应用程序的许多实例提供服务。

我想要以下内容:

1) 所有客户端首先向“看门人”服务器应用程序标识自己。考虑这是一个登录过程,其中传递了用户名和密码等凭据。调用网守程序“gserver”。 (用于看门人。)

2) 一旦每个客户端都经过验证,然后将其置于与在绑定(bind)到相同服务器地址的同一物理服务器盒上运行的不同服务器应用程序的多个实例之一的长期连接中。将这些实例中的任何一个称为“wserver”(用于“工作”服务器。)

因此,客户端看到的是“看门人”应用程序为其提供了对在同一机器上运行的多个“工作”服务器之一的密码访问。

这是“真正的”挑战:我们希望专门为入站服务器连接使用“众所周知的”端口号(比如端口 80 或 443),或者,我们自己的“众所周知的”端口。

在与 wserver(n) 的长期连接阶段,我们宁愿不必让客户端与服务器上的第二个端口通信。当然,这样做的问题是一次只能将一个服务器进程绑定(bind)到相同的端口和服务器地址。

这意味着客户端与 gserver 建立的连接也必须充当长期连接的角色。我认为实现这一点的唯一方法是 gserver 必须在登录后充当代理并将其自身与客户端之间的流量复制到客户端在逻辑上绑定(bind)到的特定 wserver(n)。

如果首先在 client(n) 和 gserver 之间建立的 TCP/IP 连接可以以某种方式“传输”到同一服务器上的另一个应用程序,并且完好无损,然后可以由其中一个 wserver(n) 实例维持长期联系。

我知道网络服务器会做这样的事情来分散服务器负载。 “负载均衡”。这里的主要区别在于“平衡”是将特定用户分配给特定 wserver(n) 实例。但我也觉得负载平衡是一种代理——我试图避免这种情况(因为它使架构复杂化并增加了开销以及单点故障。)

这是一个概念和设计问题。不要担心源代码示例,除非它们对于传达想法是绝对必要的。如果我们确定一种方法,我可以编写代码。

谢谢!

最佳答案

你要找的是file descriptor passing .见 UNP 15.7。该设施的一位知名重度用户是postfix .

关于sockets - 多个 TCP/IP 服务器并共享同一个 "well known port"......不知何故?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1864451/

相关文章:

更改文件描述符以将 STDOUT 通过管道传输到套接字?

ios - UIActivityViewController 和 UIDocumentInteractionController

c++ - 读取任意长度的消息?你怎么知道你完成了

Java套接字: Client-server communication is stuck with multi-threading if more than 1 client

c - 知道 C 中的任何跨平台套接字库(Windows 和 Linux)吗?

javascript - 现代浏览器中的安全 Javascript 代码可能吗

java - 重写 run() 方法以接受来自命令行的参数

java - ServerSocket.accept 给了我多个连接,尽管我只连接一次

android - Glide 分享转换后的 GIF

code-snippets - 在内部共享和跟踪代码片段?