Foros del Web » Programando para Internet » PHP »

Php y Sockets

Estas en el tema de Php y Sockets en el foro de PHP en Foros del Web. Holas... Bueno, necesito ideas y asesoramiento, Necesito hacer un chat con Sockets y php, tengo alguna idea de como hacerlo pero no se como implementarlo, ...
  #1 (permalink)  
Antiguo 01/04/2008, 08:19
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años, 1 mes
Puntos: 8
Php y Sockets

Holas... Bueno, necesito ideas y asesoramiento, Necesito hacer un chat con Sockets y php, tengo alguna idea de como hacerlo pero no se como implementarlo, necesito un simple ejemplo que sea abra una web , haya un campito de texto y yo escirba Hola.... y en otra pagina se vea el mensaje que envíe "hola" y viseversa. Una vez tenga un ejemplo o una idea de como hacer eso ya lo implemento y lo hago mas complejo, solo que no se por donde comenzar como lograr eso que para muchos debe ser simple, No me sirve hacerlo ni php+Mysql ni php+XML, tiene que ser php + Socket


Agradezco muchooo su ayuda, por cierto he leido demasiado de eso y en ningun lado obtengo ejemplos claros y buenos sobre eso....

Salu2
  #2 (permalink)  
Antiguo 01/04/2008, 09:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Php y Sockets

Hola RollerSky,

Es un poco complicado lo que propones ya que la comunicación por Sockets es para una arquitectura Cliente->Servidor y viceversa. Al tu entrar desde una pagina Web estas estableciendo una comunicación cliente servidor pero desde tu PC al Servidor donde esta instalado PHP.

No puedes abrir un Socket desde el servidor al mismo servidor, a menos que tengas otro servidor de "mediador" (dentro del mismo servidor) para entonces comunicarte vía sockets, aunque seria redundante.

Si realmente quieres hacer un chat de este tipo primero tendrás que programar un servidor del chat que este corriendo continuamente en tu servidor (con un ciclo infinito podría ser). Este archivo no se accesa vía Web, solamente desde la consola ya que no acepta peticiones directas.

Luego programas cada script "cliente" que lo que hace es conectarse vía sockets al servidor PHP de Chat y le envía el texto, y este lo recibe y lo propaga. Ojo que tu servidor necesitara FORZOSAMENTE un medio persistente (ya sea MySQL, SQLLite, XML, Texto) para almacenar la información o de lo contrario si usas la memoria podrías acabarte la memoria máxima que tiene PHP permitida.

Saludos.
  #3 (permalink)  
Antiguo 01/04/2008, 11:06
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años, 1 mes
Puntos: 8
Re: Php y Sockets

y como puedo crear un servidor, estuve viendo codigo pero puff! es bastante complejo, o de que otra forma que plataformas y lenguajes podria usar para crear un chat de soporte, que sea estable funcional y "rapido"
  #4 (permalink)  
Antiguo 01/04/2008, 12:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Php y Sockets

Java seria la solución ideal, ya que es Cross-Platform. Si lo deseas hacer en PHP, necesitas forzoso meterte con AJAX + JavaScript + HTML para que el chat sea rápido.

También puedes ver un chat en Flash, pero el backend (servidor) necesitaría estar ya sea en Java o en PHP.

Saludos.
  #5 (permalink)  
Antiguo 01/04/2008, 21:51
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años, 1 mes
Puntos: 8
Re: Php y Sockets

Bueno actualmente hice un chat PHP + Mysql +Ajax, pero se quedo como muy "obsoleto" porque necesito hacerlo muuucho mas complejo, lo que necesito practicamente es hacer un chat de soporte.

sigo escuchando sugerencias y ayuda gracias!
  #6 (permalink)  
Antiguo 09/06/2008, 07:10
Avatar de ramzax200  
Fecha de Ingreso: noviembre-2003
Mensajes: 172
Antigüedad: 20 años, 5 meses
Puntos: 0
Respuesta: Php y Sockets

un chat con ajax si lo haces bien queda bien, para el chat no se necesita mucha transferencia de datos.

Ahora, si quieres hacer algo mas dinamico (mas que un chat) puedes usar flash + algun xml socket server.

En internet hay muchos xml socket server's que los puedes instalar en windows, linux,etc y con el cliente flash ya funciona a la perfeccion.


http://palabre.gavroche.net/

Ahi puedes encontrar un servidor xml que funciona para flash enfocado a juegos, pero funciona para cualquier aplicacion xml con sockets.
  #7 (permalink)  
Antiguo 16/07/2008, 00:18
Avatar de [HH]KaoS  
Fecha de Ingreso: diciembre-2004
Ubicación: Nerja, Málaga (España)
Mensajes: 216
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: Re: Php y Sockets

Cita:
Iniciado por GatorV Ver Mensaje
Hola RollerSky,
...
No puedes abrir un Socket desde el servidor al mismo servidor, a menos que tengas otro servidor de "mediador" (dentro del mismo servidor) para entonces comunicarte vía sockets, aunque seria redundante.
....
¿No?

Yo estoy haciendo una práctica donde tengo un servidor que gestiona reservas para un hotel (implementado en Java) y que se comunica luego con la página web mediante sockets implementados en PHP.

La cosa es que estoy probándolo localmente y los envíos por PHP se hacen correctamente, el problema es que luego el fgets se queda un minuto extacto esperando a recibir algo (cosa que no hace) y luego termina. Si trato de hacerlo con socket_read ni siquiera acaba, se queda en un bucle infinito a simple vista. Os dejo más abajo los códigos de ambos clientes para que les echéis un ojo si queréis.

Me parece extraño lo que dices porque hace poco implemente un chat con Sockets usando C y no tuve ningún problema probando cliente y servidor en la misma máquina.

¿Alguien tiene una ligera idea de lo que pasa?
Pego el código del cliente:
USANDO fsockopen
Código:
<?php
	$max_timeout=3;

	if(!file_exists("setup.php"))
		die("Check that \"setup.php\" should be in the root directory");
	
	include("setup.php");
	$fd=fsockopen( $HOTEL_GATEWAY_ADDR, $HOTEL_GATEWAY_PORT , &$errno , &$errstr, 4 );
	if($fd==FALSE && $errno==0)
		echo date("H:i:s",time()).": <b> fsockopen failed: reason: ".socket_strerror(socket_last_error())."</b>";
	else
		echo date("H:i:s",time()).": <b>Socket opened succesfully</b><br/>";
	$request="book ".$_POST['category']." \"".$_POST['guest_name']."\"";

	echo date("H:i:s",time()).": <b>Sending: $request</b><br/>";

	if(!fputs($fd,$request)) {
		echo date("H:i:s",time()).": <b> fsockopen fputs: reason: ".socket_strerror(socket_last_error())."</b>";
		exit();
	} else { 
		echo date("H:i:s",time()).": <b>Message accepted by $HOTEL_GATEWAY_ADDR</b>.<br/>";
	    stream_set_timeout($fd, $max_timeout);
		$str_data = fgets($fd);
		$info = stream_get_meta_data($fd);
		if ($info['timed_out'])
			echo date("H:i:s",time()).": <b>The connection has expired after $max_timeout seconds (no response received)</b><br/>";
		else
			echo date("H:i:s",time()).":<b> Response: '".$str_data."'</b><br/>"; //Mostramos la salida del servidor
		
		
	}

	fclose($fd);
	echo date("H:i:s",time()).": <b>Socket closed</b>";

?>
Respuesta:
09:11:32: Socket opened succesfully
09:11:32: Sending: book 2 "123123"
09:11:32: Message accepted by localhost.
09:11:35: The connection has expired after 3 seconds (no response received)
09:11:35: Socket closed

USANDO socket_create
Código:
<?php
	$max_timeout=3;
	if(!file_exists("setup.php"))
		die("Check that \"setup.php\" should be in the root directory");
	
	include("setup.php");

	$my_new_socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname('tcp'));

	if(!socket_connect($my_new_socket,$HOTEL_GATEWAY_ADDR,$HOTEL_GATEWAY_PORT))
		echo socket_strerror(socket_last_error());


	$request="book ".$_POST['category']." \"".$_POST['guest_name']."\"";

	echo date("H:i:s",time()).": <b>Sending: $request</b><br/>";
	set_time_limit(5);
	if(!socket_write($my_new_socket,$request))
		echo date("H:i:s",time()).": <b>socket_write() failed: reason: " . socket_strerror(socket_last_error($my_new_socket)) . "</b><br/>";
	else{
		stream_set_timeout($my_new_socket, $max_timeout);
		if (false === ($str_data = socket_read($my_new_socket, strlen("Book added succesfully")))) 
			echo date("H:i:s",time()).": <b>socket_read() failed: reason: " . socket_strerror(socket_last_error($my_new_socket)) . "</b><br/>";
		$info = stream_get_meta_data($my_new_socket);
		if ($info['timed_out'])
			echo date("H:i:s",time()).": <b>The connection has expired after $max_timeout seconds (no response received)</b><br/>";
		else
			echo date("H:i:s",time()).":<b> Response: '".$str_data."'</b><br/>"; //Mostramos la salida del servidor
	}

	socket_close($socket);
	echo date("H:i:s",time()).": <b>Socket closed</b>";
	
?>
Respuesta:
(se queda constantemente esperando y nunca acaba).
__________________
Más información sobre mi: Raúl Jiménez

Última edición por [HH]KaoS; 16/07/2008 a las 01:21 Razón: actualizando el código y respuestas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:37.