Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
Node.js 我们是否应该总是选择连接池而不是单个连接?什么';使用连接池而不是单个连接的确切好处是什么?_Node.js_Networking_Connection Pooling - Fatal编程技术网

Node.js 我们是否应该总是选择连接池而不是单个连接?什么';使用连接池而不是单个连接的确切好处是什么?

Node.js 我们是否应该总是选择连接池而不是单个连接?什么';使用连接池而不是单个连接的确切好处是什么?,node.js,networking,connection-pooling,Node.js,Networking,Connection Pooling,人们说连接池与单连接相比有很多好处: 在多线程环境中,连接不能由不同的线程共享(这真的会发生吗?) 连接池可以提高吞吐量:通过添加更多连接,我们可以更快地发送数据(这是真的吗?) 使程序健壮:当某些连接断开时,我们可以使用另一个连接 根据这些优点,我认为,当且仅当我们在多线程中时,我们应该使用连接池。但是单线程环境,如Rails3、nodejs,也有连接池,为什么? 我不擅长tcp/ip/socket,我知道,如果我们发送的数据包非常小(远小于MSS),一个连接可以由多线程共享(为了证明这一点

人们说连接池与单连接相比有很多好处:

  • 在多线程环境中,连接不能由不同的线程共享(这真的会发生吗?
  • 连接池可以提高吞吐量:通过添加更多连接,我们可以更快地发送数据(这是真的吗?
  • 使程序健壮:当某些连接断开时,我们可以使用另一个连接
  • 根据这些优点,我认为,当且仅当我们在多线程中时,我们应该使用连接池。但是单线程环境,如Rails3、nodejs,也有连接池,为什么?

    我不擅长tcp/ip/socket,我知道,如果我们发送的数据包非常小(远小于MSS),一个连接可以由多线程共享(为了证明这一点,我做了一个测试:客户端向服务器发送236个字节,然后从服务器接收1306个字节,并发性为500:没有发生错误),那么可能数据包混乱不会经常发生?

    我还在nodejs中做了一个测试:将connection-pool()添加到单个连接程序中,并比较它们的性能。结果超出了我的预期:连接池至少会将性能降低3倍,如果并发性增加,性能甚至会更差。这是因为服务器的响应速度不是很快


    说了这么多,我希望有人能清楚地解释连接池,消除我对它的所有疑虑。

    任何时候你有线程,你都可能得到混乱的数据。每个线程必须使用不同的连接。没有两条路可走。连接池是解决这一问题的简单方法,它还保存了TCP连接/关闭握手。因此,我们在单线程环境中不需要连接池,例如rails(单线程模式)或nodejs?任何时候,只要有线程,都可以获得无序数据。每个线程必须使用不同的连接。没有两条路可走。连接池是解决这一问题的简单方法,它还保存了TCP连接/关闭握手。因此,我们在单线程环境中不需要连接池,例如rails(单线程模式)或NodeJ?