Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 为多个套接字使用单个端口的标准方式?_Networking_Sockets_Network Programming_Twisted - Fatal编程技术网

Networking 为多个套接字使用单个端口的标准方式?

Networking 为多个套接字使用单个端口的标准方式?,networking,sockets,network-programming,twisted,Networking,Sockets,Network Programming,Twisted,嘿,我正在用Twisted编写一个应用程序,目前我有4台服务器绑定了两个不同的端口,所有端口都通过JSON与客户端通信。是否要将这4台服务器绑定到同一个端口,并使交互保持不变 例如,假设客户端订阅两个不同的提要,通过直接套接字传输 现在我只是喜欢 server1.read_string() server2.read_string() 它将从相应的提要中读取正确的JSON字符串。是否仍然可以维护这种类型的功能,但可以通过同一端口与我的服务器联系 我不想把所有的服务器功能都放在一个大型服务器上,并

嘿,我正在用Twisted编写一个应用程序,目前我有4台服务器绑定了两个不同的端口,所有端口都通过JSON与客户端通信。是否要将这4台服务器绑定到同一个端口,并使交互保持不变

例如,假设客户端订阅两个不同的提要,通过直接套接字传输

现在我只是喜欢

server1.read_string()
server2.read_string()
它将从相应的提要中读取正确的JSON字符串。是否仍然可以维护这种类型的功能,但可以通过同一端口与我的服务器联系

我不想把所有的服务器功能都放在一个大型服务器上,并用头前缀对数据进行分区

我不想做这样的事

s = server.read_string()
header = s.split(//some delimiter)[0]
if (header == "SERVER1")
{
   // Blahh
}

为了使同一台机器上运行的多台服务器都绑定到同一端口,它们需要绑定到不同的IP地址。绑定到同一IP上的同一端口的唯一方法是启用套接字的SO_REUSESOCKET选项,但是多个服务器将能够接收彼此的入站数据,从而真正扰乱您的通信


否则,最好使用一台使用头标识特定提要的服务器。为什么不想这样做?

为了让同一台机器上运行的多台服务器都绑定到同一个端口,它们需要绑定到不同的IP地址。绑定到同一IP上的同一端口的唯一方法是启用套接字的SO_REUSESOCKET选项,但是多个服务器将能够接收彼此的入站数据,从而真正扰乱您的通信


否则,最好使用一台使用头标识特定提要的服务器。为什么不想这样做?

听起来好像有很多客户端通过HTTP与服务器交互。标准的解决方案是在客户端和服务器之间抛出一个反向代理——该代理然后根据URL将连接转发到相应的服务器。反向代理可以在任何一台现有服务器上运行,也可以在其自己的服务器上运行,以减轻负载

如果您的数据是可缓存的,反向代理也可以对您的结果进行缓存

有很多反向代理可用,您需要根据您的工作负载类型选择一个。您需要高度可配置吗?数据是公开的还是基于登录?每个连接持续多长时间/您希望一次打开多少个到的连接

,是很好的反向代理,甚至Apache也可以为您这样做

我计划使用HAProxy,因为我与我的客户机有很多正在进行的连接,并且希望将一个轨道服务器放置在与django服务器相同的URL路径中。有关如何将端口80上的多个连接从一台服务器转发到多台服务器的更多信息,请参阅。本教程的重点是Comet,但您的问题甚至比这更简单


<强>如果你正在考虑正在进行的TCP/IP连接从浏览器< /强>回到你的服务器,认真考虑。请参阅本教程中关于。Orbited还将比大多数定制解决方案更好地穿透防火墙和代理,因为它看起来像是正常的HTTP流量。

听起来好像有许多客户端通过HTTP与服务器交互。标准的解决方案是在客户端和服务器之间抛出一个反向代理——该代理然后根据URL将连接转发到相应的服务器。反向代理可以在任何一台现有服务器上运行,也可以在其自己的服务器上运行,以减轻负载

如果您的数据是可缓存的,反向代理也可以对您的结果进行缓存

有很多反向代理可用,您需要根据您的工作负载类型选择一个。您需要高度可配置吗?数据是公开的还是基于登录?每个连接持续多长时间/您希望一次打开多少个到的连接

,是很好的反向代理,甚至Apache也可以为您这样做

我计划使用HAProxy,因为我与我的客户机有很多正在进行的连接,并且希望将一个轨道服务器放置在与django服务器相同的URL路径中。有关如何将端口80上的多个连接从一台服务器转发到多台服务器的更多信息,请参阅。本教程的重点是Comet,但您的问题甚至比这更简单


<强>如果你正在考虑正在进行的TCP/IP连接从浏览器< /强>回到你的服务器,认真考虑。请参阅本教程中关于。Orbited还将比大多数定制解决方案更好地穿透防火墙和代理,因为它看起来像正常的HTTP流量。

我还需要客户端的头文件是吗?有没有比直接在消息体中传输头数据更好的方法,如我上面所示?头必须在消息数据本身中。当在任意一端接收到消息时,接收者可以识别消息与哪个提要相关。我也需要客户端的头。是吗?有没有比直接在消息体中传输头数据更好的方法,如我上面所示?头必须在消息数据本身中。当在任意一端接收到消息时,接收器可以识别消息与哪个提要相关。