Foros del Web » Programando para Internet » PHP »

PHP y Socket Server

Estas en el tema de PHP y Socket Server en el foro de PHP en Foros del Web. Saludos amigos, tengo una duda acerca de si seria factible oh mejor dicho, daría el rendimiento adecuado un socket en php, el cual atenderá muchas ...
  #1 (permalink)  
Antiguo 24/02/2012, 18:43
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta PHP y Socket Server

Saludos amigos,

tengo una duda acerca de si seria factible oh mejor dicho, daría el rendimiento adecuado un socket en php, el cual atenderá muchas peticiones por segundos (muchas!!!).

Actualmente tengo un Socket en PHP trabajando, pero no tengo todos los clientes trabajando por el, y estoy teniendo inconvenientes en una hora pico, ya que algunos clientes le retorna el error de: Connection Refused.

Es como si el Socket atendiera Una por una las peticiones, no trabaja multi tarea.

Espero sus comentarios los que tenga experiencias en el tema de socket...
Gracias!!
  #2 (permalink)  
Antiguo 24/02/2012, 21:53
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: PHP y Socket Server

Holas,

Dependeria creo del tipo de servicio que realizas con los sockets y PHP, que tipo de servicio o procesos realizas?, consultas?, chats? actualizaciones?.

Saludos
__________________
.: Gildus :.
  #3 (permalink)  
Antiguo 25/02/2012, 08:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: PHP y Socket Server

Uso poco procesos, ya que lo que realizo es un HTTP Request a otro equipo que esta en la misma RED. No hago consultas a la base de datos, ni conexión ninguna ella.

El socket la unica funcion que hace es de Escuchar y Atender las peticiones.
  #4 (permalink)  
Antiguo 25/02/2012, 10:02
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: PHP y Socket Server

Yadel

Sucede por que PHP trabaja en un solo proceso, creo que tienes dos alternativas, una probar usar sockets no bloqueantes o utilizar forks (cada vez que se conecte un cliente, forkeas el proceso principal, a sí tienes otro proceso independiente del padre atendiendo al cliente, eso si, esto ultimo solo funciona bajo entornos like unix).

Te dejo dos apuntes mios que tal vez te puedan servir un poco.

pserver – Un servidor listen socket en PHP
Fork de Procesos en PHP


Ahora, si realmente vas a atender muchos clientes y necesitas un mejor rendimientos, creo que deberías optar por otro lenguaje, que permita usar threads, como python o java. De esa manera, puedes tener un hilo para cada cliente.

Saludos
  #5 (permalink)  
Antiguo 28/02/2012, 12:19
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: PHP y Socket Server

muy interesante DeeR.

Estoy trabajando en un server en Java, lo estoy probando, pero todavía no lo he pasado a producción, veremos el resultado...

Creo q es la mejor alternativa ya que en este server no trabajo bajo UNIX, entonces perdería lo de multiproceso (oh los hilos) en PHP, que es lo que mas necesito.

Muy interesante la clase pserver, muy buena, sobre todo: _colorShell

Gracias por tu respuesta, muy acertada.

Algo mas, entonces como PHP puede trabajar en un gran proyecto ??? si la mayoria de conexiones la pone en COLA hasta q atienda la primera?????
  #6 (permalink)  
Antiguo 28/02/2012, 22:35
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: PHP y Socket Server

En PHP, si no usas varios procesos (a través de fork), es complicado atender "adecuadamente" a multiples usuarios concurrentes en un server listen socket, una alternativa es utilizando socket no bloqueantes, de esta manera, no se bloquea el socket a la espera de la respuesta de un cliente, si no, continua el flujo (y podemos atender a otro cliente), de todas formas, el rendimiento no es muy grande.

Código PHP:
stream_set_blocking($socket,0); 
De esa forma, vas a notar, que si uno de los clientes demora en responder, no bloqueas al resto de las conexiones.

Ahora realmente si necesitamos un mayor performance, lamentablmente la opción es migrar a otro lenguaje con mejor manejo de hilos.

Saludos

Etiquetas: socket
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 09:02.