怎么做?我需要在PHP中调用一个Web服务,它不会被异步执行。你的建议是什么?为它编写C或C ++代码而不是PHP更好吗?由于已经安装了NuSoap,我宁愿避免参与gSoap。使用NuSoap,我可以轻松地调用其他服务器的Web服务。我需要一个守护进程来轮询Web服务调用并将返回的数据保存为第一台服务器上的缓存。
你可能会问为什么异步通话?这是因为第二台服务器可能不只是一台。来自第二服务器的响应可能花费时间来接收,并且在此期间我更喜欢向其他服务器发送请求以具有并行响应。这有助于我在更短的时间内收到所有回复。
更新
System.Web.Services.Protocols.SoapHttpClientProtocol对象用于与NuSoap处理的服务器端的Web服务进行通信。请求针对主服务器或联合服务器。在后一种情况下,它们通过主服务器路由。我们目前使用以下机制来调用位于联合服务器上的Web服务:
$SoapClient = GetSoapClient($ServerId, $SessionId);
$result = $SoapClient->call(
"WebServiceName",
array(
'Parameter1' => $Value1,
'Parameter2' => $Value2,
...
)
);
而GetSoapClient函数定义为:
function GetSoapClient($ServerId, $LocalSessionId)
{
try
{
$srv = dbFetchOne("SELECT * FROM Servers WHERE id = ".intval($ServerId));
$wsdlUrl = "http://".$srv['IP'].":".$srv['Port']."/webService.php?wsdl";
$cache = new wsdlcache('/tmp');
$wsdl = $cache->get($wsdlUrl);
if (is_null($wsdl))
{
$wsdl = new wsdl($wsdlUrl);
if ($wsdl && $wsdl->getError() === false)
$cache->put($wsdl);
}
$client = new nusoap_client($wsdl, true, '', '', '', '');
$err = $client->getError();
if ($err)
{
error_log("Constructor error".$err);
}
$client->requestHeaders = array('LocalSessionId' => $LocalSessionId);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
return $client;
}
catch (Exception $e)
{
return null;
}
}
据此,实施我要求的最短路径和最佳方法是什么? 谢谢你的关注。
PS。服务器端代码在PHP中。