Web Services – Java + PHP5
Estudando a disciplina de Sistemas Operacionais Distribuidos, como exercício implementamos um Web Service utilizando framework axis para gerar os arquivos wsdl. O web Service implementa o Método Monte Carlo para aproximação do número PI.
Para isso, montamos um servidor utilizando a linguagem JAVA e um cliente utilizando a linguagem PHP para acessar o Web Service. Os códigos seguem a seguir:
Servidor:
MonteCarloService.jws
import java.util.Random;
public class MonteCarloService {
public int pi(int tentativas) {
int hits=0, i;
double x, y;
Random rand = new Random();
for (i=0;i< tentativas; i++) {
x = rand.nextDouble();
y = rand.nextDouble();
if(x * x + y * y < 1.0) {
++hits;
}
}
return hits;
}
}
O servidor possui apenas um método com a função PI, sendo que o framework axis disponibiliza o serviço como Web Service.
Cliente:
client.php
<?php
$tentativas = 100000;
$servidores = array (“192.168.0.3″,”127.0.0.1″,”200.239.56.145″);
$qtdeAtivos = 0;
$totalhits = 0;
$i = 0;
function url_exists($url){
$servico = @fopen($url, “r”);
if ($servico === false)
return false;
fclose($servico);
return true;
}
foreach ($servidores as $valor){
if (url_exists(“http://”.$valor.”:8080/axis/MonteCarloService.jws?wsdl”)){
$ativos[$i] = new SoapClient(“http://”.$valor.”:8080/axis/MonteCarloService.jws?wsdl”);
$i++;
}
}
$qtdeAtivos = $i;
for ($i=0;$i<$qtdeAtivos;$i++){
$totalhits+= $ativos[$i]->pi($tentativas/$qtdeAtivos);
}
echo $qtdeAtivos.” servidores ativos<br>”;
$pi = 4.0 * $totalhits / $tentativas;
if($pi!=0) echo “Valor de PI: “.$pi;
else echo “Impossível calcular o valor de PI”;
?>
O cliente verifica a quantidade de servidores que estão rodando o Web Service, e distribuem o processamento da função PI. Ao final, se houver algum servidor ativo, é mostrado o valor aproximado de PI.
Como PHP não oferece o uso de threads, não se vê ganho em processamento pela distribuição, porém, nesses casos, pode-se utilizar outras métodos de programação.
Setembro 21, 2006 at 12:46 pm
Parabéns pela idéia de publicar os trabalhos. Eu acho que isso é uma maneira de manter um currículo sempre atualizado e mostrar o que é capaz de fazer.
Setembro 21, 2006 at 2:29 pm
oi meu bem…
tah eu sei q isso naum é p mim né
mas eu li tudo…
apesar de naum entender muito
fikei muitooo orgulhosa de vc meu amor!
ti amo tah.. e desculpa se meter até aki
mas naum resisti..=)
beijus
Setembro 23, 2006 at 7:13 pm
oi meu socio…
eu sei que eu nao te ajudei a fazer…
mas eu li tudo
apesar de nao entender nada
fiquei feliz de nos termos apresentado direitinho
hauhauh
caso o elton voltar a ler isto aki… a parte de que eu nao fiz nada eh mentira…
Setembro 29, 2006 at 7:41 pm
Já retirei tua nota do trabalho
heheh
Outubro 4, 2006 at 2:11 pm
Bah… vo precisa dos créditos samuca…
hauhau… Falow
Junho 19, 2008 at 3:43 am
Samuel, flndo sério agora.
Tenho uma aplicação WEB (PHP) q é o front end com os usuários ok.
E tenho um serviço Java q faz a comunicação com o nosso hardware. Tem coisas, q deveriam ser perguntadas pro Hardware sem passar pelo banco de dados. Tipo, como funciona hje, tenho uma tabela chmada de comandos, q o PHP insere um comando q deve ser enviado para nosso hardware, e o java q irá abrir um socket com o hardware e mandar o tal comando. Mas tipo, o PHP qr simplesmente saber o horário q está no relógio do hardware, nao queria inserir um comando, e sim, fazer com q o PHP comunique direto com o JAVA (WS seria uma boa solução…) e o Java conversasse com o hardware e já desse a respostapro PHP mostrar na tela para o usuários. O problema é q não consigo aceitar que terei q instalar o Tomcat, com o axis, só para isso. Vê alguma outra alternativa???
valeu. parabéns. flw