pymongo ping 和从终端 ping

问题描述 投票:0回答:1

我有一个非常简单的测试脚本

from pymongo import MongoClient
from pymongo.errors import ConnectionFailure

try:
    client = MongoClient('mongodb://your_host:your_port')
    client.admin.command('ping')  # Sends a ping command to the server
    print("Connection successful!")
except ConnectionFailure:
    print("Failed to connect to MongoDB server.")

当我运行它时,显示我的电脑与主机的连接成功。 然而事实证明,我无法从我的终端 ping 主机(这似乎是由于我正在使用的 VPN 的特定设置所致)(我并不寻求特别解决此问题)

ping your_host -c 1
 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

所以我的问题是,

client.admin.command('ping') 
没有抛出异常,那么这个命令实际上涉及什么?我怀疑它只是发送但不接收数据包。这与终端命令 ping 有什么区别吗?

是否有其他方法来检查与主机的连接是否成功(无需 ping)?

编辑: 有人问我

为什么成功后还要尝试ping数据库 连接到它?连接成功后就是 工作 - 为什么你要检查两次?

很抱歉没有解释。实际上,上面的脚本只是一个测试脚本,而不是我正在工作的主要脚本。在主脚本中,脚本首先发送 ping,但从终端发送 ping。它显然失败了(因为正如我所解释的,我的机器无法 ping 通主机)。

但是我发现使用pymongo ping 时,可以ping 成功。 (并不是说我需要 ping)所以我想了解为什么我可以 ping 那里但不能从终端 ping。 (我被告知我的 VPN 配置不允许 ping,这解释了终端命令的失败,但为什么它可以与 pymongo 一起使用?)

mongodb pymongo ping
1个回答
0
投票
ping 网络实用程序

网络实用程序使用 ICMP,而不是 TCP,发送 ICMP 回显请求,而不需要建立连接。预期响应是 ICMP 回显回复。这会被防火墙简单地阻止,同时允许任何 TCP 流量。

MongoDB

ping 数据库命令

要求已建立与数据库的连接。 Pymongo 通过已建立的 TCP 连接发送包含命令名称“ping”的OP_MSG。然后数据库服务器用它自己的包含“ok: 1”的 OP_MSG 进行响应。 尽管名称相同,但这两个操作服务器的目的略有不同,使用的方法也截然不同。

© www.soinside.com 2019 - 2024. All rights reserved.