Blog de Gonzalo

SOCKETS CON PHP

Antes de explicar como usar sockets con php voy a explicar que es un socket. Un socket es un método para la comunicación entre un programa del cliente y un programa del servidor en una red. Un socket se define como el punto final en una conexión. Los sockets se crean y se utilizan con un sistema de peticiones.
En este caso se necesita un servidor que estará escuchando y un cliente que estará mandando peticiones. Ejemplo:
servidor.php


// Set establece el host y el puerto
$host = '127.0.0.1';
$port = 8080;

// Se crea el socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0);

// Se enlaza el socket al host y puerto
socket_bind($socket, $host, $port);

// Empieza la escucha
socket_listen($socket);

// Se reciben las peticiones
while (true) {
    $clientSocket = socket_accept($socket);
    
    // Se leen los datos del cliente
    $input = socket_read($clientSocket, 1024);
    $output = "Server nñlknlkm: $input\n";
    
    // Se manda respuesta al cliente
    socket_write($clientSocket, $output, strlen($output));
    
    
    socket_close($clientSocket);
}
cliente.php

// host y puerto del servidor
$host = '127.0.0.1';
$port = 8080;


// // Se crea el socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0);

// Connect to the server
socket_connect($socket, $host, $port);

// Se manda mensaje al servidor
$message = "mensaje";
socket_write($socket, $message, 1024);

// Se lee respuesta servidor
$response = socket_read($socket, 1024);
echo "Respuesta: " . $response;

socket_close($socket);
Primero hay que ejecutar el script de servidor.php y luego el de cliente para poder mandar las peticiones.
Como se puede observar en este ejemplo la ip es 127.0.0.1, pero para probar bien yo he tenido que poner el servidor en un virtualhost de mi local. Si podéis probar subiendo el fichero servidor.php a un hosting donde tenga instalado el modulo de php de sockets y el puerto que vais a usar abierto funcionará.
NOTA: Si se quiere hacer más de una petición hay que abrir, mandar petición y cerrar el socket tantas veces como peticiones se quieran hacer.
También se puede usar fsockopen en vez de socket_create, la diferencia es que fsockopen se conecta a un host linux.

Compartir en twitter