嘿,我正在用 Twisted 编写一个应用程序,就目前而言,我有 4 个服务器绑定(bind)了两个不同的端口,它们都通过 JSON 与客户端通信。无论如何将这 4 个服务器绑定(bind)到同一个端口并且交互保持不变?
例如,假设客户端订阅了两个不同的提要,通过直接套接字传输。
现在我只是喜欢
server1.read_string()
server2.read_string()
它将从相应的提要中读取正确的 JSON 字符串。有没有办法维持这种类型的功能,但在同一个端口上联系我的服务器?
我不想将所有服务器功能都投入到一台大型服务器中,并通过标题前缀对数据进行分区。
我不想做类似的事情
s = server.read_string()
header = s.split(//some delimiter)[0]
if (header == "SERVER1")
{
// Blahh
}
最佳答案
听起来您有许多客户端通过 HTTP 与您的服务器交互。标准解决方案是在客户端和您的服务器之间抛出一个反向代理 - 然后该代理根据 URL 将连接转发到适当的服务器。反向代理可以在您现有的任何服务器或自己的服务器上运行以减轻负载。
如果您的数据是可缓存的,反向代理也可以对您的结果进行缓存。
有许多反向代理可用,您需要根据自己的工作负载类型选择一个。你需要它是高度可配置的吗?数据是公开的还是基于登录的?每个连接持续多长时间/您想要一次保持打开多少个连接?
Squid , Varnish , HAProxy是很好的反向代理,甚至 Apache 也可以为您做到这一点。
我计划将 HAProxy 用于 Gridspy, my project因为我与我的客户有很多持续的连接,并且希望将一个轨道服务器放置在与我的 django 服务器相同的 URL 路径中。见 This tutorial有关如何将端口 80 上的多个连接从一台服务器转发到多个服务器的更多信息。本教程的重点是 Comet,但您的问题比这更简单。
如果您正在考虑来自浏览器的持续 tcp/ip 连接 回到你的服务器,认真考虑Orbited .请参阅本教程关于 graphs via orbited and morbidQ . Orbited 还将比大多数自定义解决方案更好地穿透防火墙和代理,因为它看起来像正常的 HTTP 流量。
关于networking - 将单个端口用于多个套接字的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1540360/