我使用Windows附带的WinLDAP.DLL连接到不同的LDAP服务器(1x OpenLDAP,1x Active Directory)。编程语言是Delphi,但它可能与此无关。
在使用服务器名称而不是IP地址时,在几个配置中,“ldap_connect”的调用非常慢(6-7秒)。 Ping或制作同一服务器的nslookup并不慢。为什么只有ldap连接速度慢?有什么东西我可以检查以确定问题吗?
编辑:WMware在我的计算机上安装了2个虚拟以太网适配器。如果我停用这些适配器,ldap_connect会快2-3倍。它并没有完全解决问题,但它可能有助于找到解释。
答案 0 :(得分:1)
这几乎可以肯定是DNS配置错误。检查nslookup和反向查找时间。
答案 1 :(得分:1)
LDAP服务器正在执行reverse DNS lookup。
的机会很棒答案 2 :(得分:0)
我仍然不知道,如果我使用服务器名称而不是IP地址,为什么连接速度很慢。但是为了解决这个问题,我决定自己解析IP地址而不是让WINLDAP.dll这样做。
可以通过使用类似这样的函数来实现:
function GetIPAddress(const HostName: AnsiString): AnsiString;
var
HostEnt: PHostEnt;
Host: AnsiString;
SockAddr: TSockAddrIn;
begin
Result := '';
Host := HostName;
if Host = '' then
begin
SetLength(Host, MAX_PATH);
GetHostName(PAnsiChar(Host), MAX_PATH);
end;
HostEnt := GetHostByName(PAnsiChar(Host));
if HostEnt <> nil then
begin
SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
Result := inet_ntoa(SockAddr.sin_addr);
end;
end;