Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ktinho

socket tcp em php

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

 

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.