Comunidad de diseño web y desarrollo en internet online

Crear un socket server en PHP

Citar            
MensajeEscrito el 18 Abr 2011 07:59 am
Hola amigos!

He estado googleando por varios días y no he encontrado lo que estoy buscando, un tutorial donde explique lo más básico para crear tu propio socket server en php en windows.

Lo que me gustaría aprender es:

- Que software es recomendable (yo utilizo mucho el wampserver o el easyphp, no se si uno o ambos se presten para dicho fin)

- (Servidor) Un script básico de como abrir y establecer el socket

- (Cliente) Un script simple para probar si funciona la conexión cliente/servidor

Saben de algun tutorial que me puedan recomendar?

De antemano muchas gracias.

Saludos.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Abr 2011 09:05 pm
Les comento que ya pude hacer mi propio servidor de sockets en PHP en windows, tomando un poco de aquí y de alla lo logre.

Les voy a explicar como lo hice:

Ingredientes:

- wampserver 2.0
- PHP 5.2.9-2 (Por defecto no va a venir instalado, pero lo pueden conseguir Aquí)
Les platico que tuve muchos problemas con la versión 5.3.0.
- Apache 2.2.11 (opcional, yo trabaje con esta versión)
- Especial cuidado en esto! deben de tener activa la extensión para sockets de PHP. La pueden activar desde del icono de wampserver: Clic izq. en el icono >> PHP >> Extensiones de PHP >> clic en: php_sockets
O directamente en el archivo php.ini Clic izq. en el icono >> PHP >>php.ini
y buscan esta línea: extension=php_sockets.dll A la cual le quitan el punto y coma que tiene al inicio.

Una vez hecho esto, reinician el wampserver.

Para tener información más completa acerca de su PHP, pueden respaldar el archivo index.php que esta en la carpeta 'www' y crear su propio phpinfo, esto se hace creando un nuevo archivo index.php, pero ahora con esta línea:

Código PHP :

<?php  phpinfo(); ?>


Ahora pueden verificar el estado de su PHP, y buscar si ya tienen activada la extensión para sockets, para esto busquen este apartado y verifiquen que Sockets Support sea 'enabled':



Ahora tenemos que crear nuestro demonio o daemon, este se encargará de escuchar en todo momento nuestras peticiones como clientes y de enviarnos las respuestas del servidor. Yo utilice este sencillo script que está en el apartado de 'socket_accept' en el manual de PHP y en específico en la ayuda para sockets:

Código PHP :

<?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'127.0.0.1',65500);
socket_listen($socket);

echo "Esperando conexión\n\n";
$conn = false;
switch(@socket_select($r = array($socket), $w = array($socket), $e = array($socket), 60)) {
    case 2:
        echo "Conexión rechazada!\n\n";
        break;
    case 1:
        echo "Conexión aceptada!\n\n";
        $conn = @socket_accept($socket);
        break;
    case 0:
        echo "Tiempo de espera excedido!\n\n";
        break;
}
   
   
if ($conn !== false) {
    // communicate over $conn
}

 
?>


Lo guardamos en la carpeta 'www' del wampserver.

Ahora algo interesante y crucial para que esto funcione en windows.
En muchos de los ejemplos que estuve viendo aparece una línea un poco extraña (para los que no estamos muy familiarizados con Linux):

Código :

#!/usr/local/bin/php –q 


Esta línea en Linux funciona para apuntar hacia la ubicación de nuestra CLI de PHP.

Esto sirve para ejecutar el archivo binario de la CLI y el archivo que lo contenga se inicialice al arrancar nuestro servidor y se mantenga activo en segundo plano (algo así como un servicio).

Pero lo que nosotros necesitamos en windows es crear un proceso que mantenga activo a nuestro demonio o daemon, para esto crearemos un archivo con formato .bat el cual (de preferencia) guardaremos en la carpeta del wampserver (en mi caso c:/wamp), el archivo debe incluir la siguiente línea:

(Lo pueden crear con el bloc de notas)

Código :

c:/wamp/bin/php/php5.2.9-2/php.exe -q c:/wamp/www/socket.php


En donde:

c:/wamp/bin/php/php5.2.9-2/php.exe > Apunta hacia la ruta de nuestra CLI en windows.

c:/wamp/www/socket.php > Apunta a nuestro script PHP que funciona como demonio.

Ahora para ejecutarlo necesitamos acceder a él por medio del línea de comando en windows, presionamos la combinación de teclas 'Windows + R' escribimos cmd y presionamos enter.

Una vez abierta la ventana de línea de comandos, si nuestra instalación del wampserver está en c:/, tecleamos: c:/wamp/run

Y tendrán que ver algo igual a esto:



Ahora bien que si quieren tener un poco más de comodidad para iniciar este proceso, pueden crear un acceso director en el escritorio:

Clic derecho en el escritorio >> Nuevo >> Acceso directo >> pegan esta línea:

Código :

cmd /k c:/wamp/run


Listo!!, con esto ya deberíamos tener nuestro servidor funcionando, ahora solo falta probarlo, creamos un script PHP con el siguiente código:

Código PHP :

<?php
/*
 *http://www.php.net/manual/en/ref.sockets.php
 */

$host = "127.0.0.1";

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$puerto = 65500;

if (socket_connect($socket, $host, $puerto))
{
    echo "\nConexion Exitosa, puerto: " . $puerto;
}
else
{
    echo "\nLa conexion TCP no se pudo realizar, puerto: ".$puerto;
}
socket_close($socket);
?>


Lo pueden llamar conectar.php y lo guardan en la carpeta 'www' del wampserver, finalmente lo ejecutan desde su navegador: http://localhost/conectar.php

y deberían tener algo igual a esto:



Y como postre:

Si quieren que su servidor sea visto por todos los equipos de su red, pueden hacer esto:

Clic izq. en el icono de wampserver >> Apache >> httpd.conf

Hagan un respaldo del archivo antes de hacer esto!!

Busquen la línea:

Código :

ServerName 127.0.0.1:80


Pueden ponerle una almohadilla o gato detrás de línea para comentarla, así: #ServerName 127.0.0.1:80

Ahora agreguen otra línea igual cambiando el 127.0.0.1 por la ip de su computadora, en mi caso:

Código :

ServerName 192.168.1.105:80


Guarden y reinicien el wampserver, ahora solo desde otro equipo de tu red teclea tu ip, ósea: http://192.168.1.105


Espero que sea de su agrado.

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Abr 2011 04:11 pm
Excelente aporte.

Solo un detalle: olvidaste decir que el archivo .bat que se cree con el Bloc de Notas debe llamarse RUN.BAT

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 26 Abr 2011 02:35 am
Ups!! muchas gracias DriverOp por el apunte.

Aunque el nombre del archivo puede ser diferente, se me olvido mencionar que yo lo llamé "run.bat".

Saludos y gracias DriverOp!!

Por px87

Claber

141 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Abr 2011 10:54 am
Excelente tutorial!! me funcionó!!!!

Por JOlmos

11 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.