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
Sockets Azure服务总线、Redis缓存、队列等中的单个TCP通道何时不足_Sockets_Tcp_Redis_Azureservicebus_Azure Redis Cache - Fatal编程技术网

Sockets Azure服务总线、Redis缓存、队列等中的单个TCP通道何时不足

Sockets Azure服务总线、Redis缓存、队列等中的单个TCP通道何时不足,sockets,tcp,redis,azureservicebus,azure-redis-cache,Sockets,Tcp,Redis,Azureservicebus,Azure Redis Cache,我在多个地方看到过这种建议,例如: 多个工厂:由同一工厂创建的所有客户端(发送方和接收方除外)共享一个TCP连接。最大消息吞吐量受可通过此TCP连接的操作数的限制。单个工厂可以获得的吞吐量随着TCP往返时间和消息大小的不同而变化很大。为了获得更高的吞吐量,您应该使用多个消息传递工厂 您可以找到针对Redis、RabbitMQ等的类似建议。我的问题是,一个TCP通道如何耗尽?我相信在单个TCP通道上没有带宽限制 那么,为什么人们建议使用多个通道来实现高吞吐量呢?是否因为: 在这种情况下,客户端应用

我在多个地方看到过这种建议,例如:

多个工厂:由同一工厂创建的所有客户端(发送方和接收方除外)共享一个TCP连接。最大消息吞吐量受可通过此TCP连接的操作数的限制。单个工厂可以获得的吞吐量随着TCP往返时间和消息大小的不同而变化很大。为了获得更高的吞吐量,您应该使用多个消息传递工厂

您可以找到针对Redis、RabbitMQ等的类似建议。我的问题是,一个TCP通道如何耗尽?我相信在单个TCP通道上没有带宽限制

那么,为什么人们建议使用多个通道来实现高吞吐量呢?是否因为:

  • 在这种情况下,客户端应用程序将大量小消息发送到单个tcp通道,每个操作将锁定tcp套接字,然后发送消息。它可能导致锁争用。如果我们使用多个tcp通道,这种争用可以在一定程度上得到解决

  • 若在tcp通道上发送大型消息,则序列化/反序列化并将其推送到该通道可能需要一些时间。它可以阻止其他小消息

  • 这些是实际原因吗(或者如果这些假设是错误的,那么真正的原因是什么)?

    基本上,你是对的。 客户端1-->TCP/IP-->服务器(执行一些处理) 现在,客户机2想要向服务器发送请求吗?客户端2需要等待客户端1完成(我假设这里的上下文是关于阻塞I/O的)。所以,如果您有多个TPC连接,客户端2可以与客户端1同时发送请求==>增加吞吐量。 但是,维护更活跃的连接是有成本的。您应该确保您有“足够”的连接来满足您的请求,并尽量减少“空闲”连接的数量