socket tcp em php
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";/ Defina a porta /
$porta = 8000;
/ Define o host /
$host = gethostbyname("127.0.0.1");
/ Crie um socket /
$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;
}/ De um bind na porta /
$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";while(true)
{
$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";
}
}else
{
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";/ Defina a porta /
$porta = 8000;
/ Define o host /
$host = gethostbyname("127.0.0.1");
/ Crie um socket /
$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;
}/ De um connect na porta /
$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]));switch($n)
{
case 0 :
$msg = socket_read($socket_cliente,100);
if ($msg){
print "Mensagem recebida: $msg\n";
}
break;case 1 :
$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.
Discussão (2)
Carregando comentários...