Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
ai galera sei que tem como fazer um servidor tcp com php agora eu queria saber se tem como rodar uma pagina de chat com php sem que a conexao seja quebrada como no http tenho dois script que troca informaçoes depois sai mais nao acho um geito de fazer uma conexao persistente, entre cliente e servidor.
cliente
#!/usr/bin/php -q
<?php
error_reporting(E_ALL);
echo "Conexao TCP/IP em PHP\n";$socket_servidor = socket_create(AF_INET,SOCK_STREAM,0);
if ($socket_servidor < 0)print "Nao foi possivel obter socket para conexao com $host\n";
exit;
}$bind = socket_bind($socket_servidor,$host,$porta);
if ($bind < 0)print "Nao foi possivel fazer BIND no $host:$porta\n";
exit;
}
$listen = socket_listen($socket_servidor,5);
if ($listen < 0)print "Nao foi possivel fazer LISTEN no $host:$porta\n";
exit;
}
$conexao = 0;
print "Aguardando conexoes na porta $porta\n";$socket_cliente = socket_accept($socket_servidor);
if ($socket_cliente < 0)print "Nao foi possivel aceitar conexao com cliente remoto\n";
break;
}
$conexao++;
print "Conexao numero $conexao\n";
$funcao = socket_read($socket_cliente,8);
if ($funcao)print "Funcao: $funcao\n";
if ($funcao == 'LER')$msgler = "Funcao Ler";
socket_write($socket_cliente,$msgler,strlen($msgler));
}
else if ($funcao == 'ESCREVER')$msg = socket_read($socket_cliente,100);
if ($msg)print "Mensagem recebida: $msg\n";
}
}print "Funcao nao implementada $funcao\n";
}
socket_close($socket_cliente);
}
}
socket_close($socket_servidor);
print "Servidor saindo...\n";
?>
e o cliente
#!/usr/bin/php -q
<?php
/ Cliente /
error_reporting(E_ALL);
echo "Conexao TCP/IP em PHP\n";$funcao = array("LER","ESCREVER");
for ($n = 0; $n < 2; $n++)$socket_cliente = socket_create(AF_INET,SOCK_STREAM,0);
print "$socket_cliente\n";
if ($socket_cliente < 0)print "Nao foi possivel obter socket para conexao com $host\n";
exit;
}$connect = socket_connect($socket_cliente,$host,$porta);
if ($connect < 0)print "Nao foi possivel conectar no $host:$porta\n";
exit;
}
print "Conexao $n $host:$porta Funcao : $funcao[$n]\n";
socket_write($socket_cliente,$funcao[$n],strlen($funcao[$n]));$msg = socket_read($socket_cliente,100);
if ($msg)print "Mensagem recebida: $msg\n";
}
break;$msg = "Minha mensagem";
socket_write($socket_cliente,$msg,strlen($msg));
print "Mensagem enviada\n";
break;
}
socket_close($socket_cliente);
print "Conexao fechada\n";
}
print "Cliente finalizou normal";
?>
é rodado pela linha de comando. queria saber se isso é possivel.
no javascript usa-se a funçao send para enviar uma mensagem via socket agora com php eu nao sei.
sim amigo mais eu queria saber se é possivel manter viva éssa conexao entre uma pagina e um servidor de socket tcp porque se o socket for http depois que os dados forem enviados a conexao com a pagina é fechada.
exemplo http: cliente(navegador) envia uma solicitaçao de uma pagina ex:(index) servidor recebe éssa solicitaçao gera a index entrega para o cliente(navegador) e fecha a conexao para evitar sobre carga.
exemplo tcp: cliente(navegador) faz uma conexao e recebe os dados e nao é fechado e pode trocar dados em tempo real sem ser preciso reabrir uma conexao ou pedido. essas conexoes fica em um loop no servidor e só é fechado quando o cliente envia uma funçao close.
em javascript sei que é possivel mais em php nao sei e javascript só funciona nos navegadores com webkit que sao chrome e safari.
quero saber se é possivel manter viva uma conexao tcp entre dois php cliente e servidor.
se a coneao do cliente, o link de conexao, ou canal de internet do cliente cair, ou quebrar, acho meio dificil o seu socket ficar vivo...