我正在使用grails处理MongoDB。当我运行“mongod”命令时,它给了我135左右的连接数,但仍然可以连接。
如何才能获得一个连接。
对我有益的任何帮助。
答案 0 :(得分:0)
MongoDB的每个驱动程序都维护一个连接池,以防止三次握手的开销。你看到的是预期的行为。
假设您有一个显示所有笔记的网页。调用控制器后,您将查询请求用户的所有注释并使用GSP显示它。现在,您有两个并发用户的图像。如果您只有一个连接,则其中一个必须等到返回其他用户的结果。在谈到两个并发用户时,获得的延迟并不多。但现在想象你有100或1000个并发用户......他们会永远等待,甚至可能会遇到超时。
好的,现在我们已经同意为什么我们需要多个连接,让我们找出它们为什么那么多。打开套接字连接时,会发生一些事情。基本上,人们可以像这样转录它
C:嗨,服务器!
S:嗨,客户!
C:哦,你在跟我说话!酷!S:是的,我是MongoDB服务器,版本3.0!
C:太棒了,就是我想要的!你能告诉我你的身份吗? S:好的!我是名为“replSet”的副本集的辅助节点,主节点在192.168.0.1上,另一个节点在192.168.0.100上找到 C:Darn,需要和小学生交谈!但是,让我们保持联系! S:好的!如果你需要我,会在这里!
现在,客户端将打开与主服务器的连接,并且几乎相同的情况发生,只有当服务器将自己标识为主服务器时,两者才开始交换文档。即使我们有一个独立的服务器,这个过程也需要一段时间。不久,但它会增加延迟,无缘无故地提供答案。无论是在服务器端还是在客户端,建立的连接都很便宜。对于服务器,它略微超过一兆字节,在客户端,它不应超过几千字节的RAM。因此,通过预先分配的连接,您可以节省时间,从而以一小部分RAM为代价提供更好的性能。
如果使用了所有连接会怎样?
通常,只建立最大可能连接的一小部分。如果剩下一定数量的连接,则建立几个新连接。这种情况一直持续下去。如果有多个连接是免费的,那么一些连接会被拆除。在某些情况下,所有可能的连接都已建立。如果发出更多请求,则单个请求必须等到释放连接。
您可以通过发布
找出可以建立的连接数db.serverStatus()
在命令行上。 connections
字段显示您拥有的当前和可用连接数。