Tema: socket
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/08/2014, 11:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 8 años, 3 meses
Puntos: 319
Respuesta: socket

Hola @sekafry te comento mi experiencia que tal vez te sirva para dar los primeros pasos con los websockets, yo tengo un VPS con debian, php 5.4 y servidor web nginx, me descargue los fuentes de este tutorial: http://www.sanwebe.com/2013/05/chat-...ket-php-socket que es para crear un chat con websockets.

Estos son los cambios que hice para hacerlo andar:
server.php
Linea 2: $host = '31.220.50.217'; //host
En esta linea puse la ip de mi VPS.
Linea 147: "WebSocket-Location: ws://$host:6338/web-sockets/chat/server.php\r\n".
La linea anterior estaba mal ya que hacia referencia a un archivo inexistente, en mi vps uso un mapeo de puertos, por eso puse 6338 en vez de 9000, en el mapeo tengo definido que el puerto publico 6338 corresponde con el 9000 interno, tambien tengo definido que el puerto publico 6336 corresponde al 80 interno. Luego del puerto va el path hasta la ubicacion del archivo.

index.php
Linea 43: var wsUri = "ws://31.220.50.217:6338/web-sockets/chat/server.php";
Puse la ip del VPS y el puerto que corresponde al 9000 (recuerda que con el mapeo, el 6338 se convierte en 9000, de acuerdo a mi configuracion actual) y luego el path hasta la ubicacion.

Esta url debe ser igual a la que se figura en la linea 147 de server.php.

Luego de eso, accedi por el navegador a: http://31.220.50.217:6336/web-sockets/chat/index.php y puedes ver que los websockets se conectan y funcionan correctamente.

En la web de este tutorial esta bastante bien explicado como funciona cada parte del script (esta en ingles, pero el esfuerzo vale la pena)

Te sugiero que intentes hacerlo andar asi como yo lo hice (solo que poniendo los datos de tu servidor en los parametros), una vez que lo tengas en funcionamiento puedes tranquilamente empezar a modificarlo y a jugar con las funciones para aprender bien que hace cada cosa.


Para responder puntualmente a tu pregunta:
El websocket no puede estar siempre funcionando, automaticamente muere luego de un tiempo cuando no hay nadie conectado, por eso debes iniciarlo accediendo a la pagina del server y luego a la del cliente.
Lo que si puedes hacer, es que el script inicie automaticamnete el socket si este no esta iniciado, para eso la via mas facil es crear un archivo auxiliar llamado status.txt en la carpeta del websocket, y, siguiendo el ejemplo anterior, en la linea 21 de server .php, antes del inicio del while infinito poner:

file_put_contents("status.txt", "on");

y en la linea 76 antes del cierre del socket poner:

file_put_contents("status.txt", "off");

ahora en el index.php, en la linea 41 antes del document.ready poner:

Código php:
Ver original
  1. <?php
  2.     if(file_get_contents("status.txt") != "on")
  3.     {
  4.         echo("$.post('http://31.220.50.217:6336/web-sockets/chat/server.php', {});");
  5.     }
  6. ?>

con eso si el websocket no existe se iniciara solo
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 07/08/2014 a las 12:19