Foros del Web » Programando para Internet » PHP »

chat web

Estas en el tema de chat web en el foro de PHP en Foros del Web. Buenas noches a todos, Actualmente estoy pensando en hacer un chat web con intenciones de practicar y les escribo para que me den algunos consejos ...
  #1 (permalink)  
Antiguo 08/10/2013, 21:41
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
chat web

Buenas noches a todos,

Actualmente estoy pensando en hacer un chat web con intenciones de practicar y les escribo para que me den algunos consejos y me quiten algunas dudas que tengo...

Seria recomendable hacer un servicio web para crear el chat?

se podria hacer un servicio que al momento de que se envie algun mensaje este lo inserte en el chat siempre y cuando no se halla leido...



EL uso de Ajax para traer datos de la base de datos haria que el servidor colapse?

en caso de que sean muchos los usuarios que chat a la vez...


Cual seria la mejor opcion para crear un chat?

Donde podria conseguir informacion sobre protocolo xmpp?

e buscado en google y solo e encontrado dos web... :S


De ante mano a los que tengan algo de tiempo y me puedan ayudar muchas gracias
  #2 (permalink)  
Antiguo 09/10/2013, 02:32
 
Fecha de Ingreso: noviembre-2010
Ubicación: Córdoba
Mensajes: 119
Antigüedad: 13 años, 5 meses
Puntos: 8
Respuesta: chat web

Error, no se debe utilizar la base de datos para un chat, busca otros métodos, que haberlo haylos.
  #3 (permalink)  
Antiguo 09/10/2013, 06:52
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
Respuesta: chat web

Alguna recomendacion para crear el chat?

si no es con base de datos seria mejor con xml o con un archivo.txt?
  #4 (permalink)  
Antiguo 09/10/2013, 08:37
 
Fecha de Ingreso: diciembre-2011
Mensajes: 21
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: chat web

Hola, @kraneok podrias indicar porque no usar una bd? y en que se almacenarian las conversaciones para llevar un historial???

Yo estoy desarrollando un chat y estoy usando Node.js, tiene una gran integracion con mysql, y se puede usar con php, decidi hacerlo con socket.io porque asi no tengo que estarle solicitando al servidor si hay un nuevo mensaje, con este se entregan en linea deverias de investigar un poco sobre Node.js y socket.io.

saludos
  #5 (permalink)  
Antiguo 09/10/2013, 09:06
 
Fecha de Ingreso: noviembre-2010
Ubicación: Córdoba
Mensajes: 119
Antigüedad: 13 años, 5 meses
Puntos: 8
Respuesta: chat web

Simplemente por que no me parece correcto estar haciendo muchísimas peticiones a MySQL por segundo, sobrecargaría el chat muchísimo, para empezar está bien, con el tiempo te das cuenta de que si ese chat llega algún lado y comienza a tener muchos usuarios, probablmente de mas de un problemas.
Hay otras formas de programar chat y llevar un log.
  #6 (permalink)  
Antiguo 09/10/2013, 11:02
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Respuesta: chat web

Siempre que veo que alguien quiere hacer un chat con una base de datos, xml o archivos de texto automaticamente me doy cuenta que hay un "espacio" en su conocimiento de protocolos de red, intercambio de información y arquitectura de computadoras.

Un chat es una aplicacion con muchos usuarios concurrentes enviando informacion constantemente.

Cuando escribes un archivo (.xml, .txt, .dat, lo que sea) el sistema opeartivo genera un "lock" para ese archivo de tal manera que no se puede escribir ni leer de ese archivo hasta que ese "lock" sea liberado.

Por lo tanto utilizar archivos para construir un chat, es pesima idea porque en cuanto el numero de usuarios de 0 a 20 vas a empezar a notar "lag" y conforme el numero de usuarios vaya aumentando, el mismo "lag" ira aumentando tambien.

¿Porque? Porque asi funcionan las computadoras, cuando escribes algo a un archivo, el sistema operativo tiene que escanear el disco, encontrar el archivo, crear un lock, abrir el archivo, escribir los bytes y liberar el lock.

Si tu servidor es multithreaded, entonces puede realizar varias operaciones al mismo tiempo, pero en el caso que estes un host compartido, muy probablemente tu host es una maquina virtual con 1 thread para tu usuario, o en otras palabras, solamente puede hacer 1 cosa al mismo tiempo, y esa misma cosa la tiene que repartir entre administrar usuarios, servir contenido, liberar memoria, etc... por lo tanto construir un chat basado en archivos es super ineficiente.


Con respecto a tu segunda idea:
Construir un chat usando MySQL, es el mismo problema con los archivos, al final del dia las bases de datos son programas que escriben a archivos de una manera super optimizada.

MySQL maneja las conexiones concurrentes dependiendo del tipo de motor de almacenamiento que utilices. MySQL tiene varios motores de almacenamiento que se aplicar POR tabla, pero los dos mas comunes son:

1) InnoDB
2) MyISAM

La diferencia radica en como escriben los "locks" a las tablas.

MyISAM, escribe "locks" por tabla. Es decir que si estas escribiendo a una tabla con MyISAM, nadie mas va a poder escribir sobre esa tabla hasta que tu termines. Repite eso por cada usuario conectado, y empezaras a ver el mismo LAG que te mencione anteriormente.

InnoDB escribe "locks" por renglones, es decir que MySQL puede hacer operaciones sobre la tabla simultaneamente ya que solamente bloquea los renglones, no la tabla completa.

Seguramente estaras pensando "ahh pues entonces utilizo InnoDB"

El problema con InnoDB es que es relativamente lento con los "SELECTS", o almenos es mas lento que MyISAM cuando haces SELECTs por el mismo tipo de "locking" porque tiene que verificar que los renglones que va a utilizar para el SELECT no tengan un lock, y si tienen un lock, tiene que esperar a que ese lock se libere para poder seleccionarlo. Este escenario es muy comun en un ambiente de "Chat".

y ya que vas a estar haciendo tanto INSERTS como SELECTS en tus tablas, por lo tanto usar MySQL (o cualquier base de datos) para implementar un chat es una pésima

Entonces, ¿Como construyes un chat?

Primero entiende lo que es un chat, un chat en su forma mas simple es un programa que establece una conexion persistente en el servidor, envia un mensaje al servidor y el servidor regresa ese mensaje de regreso a los clientes conectados.

Por lo tanto, si quieres construir un chat (rapido) necesitas programar un servidor que acepte multiples conexiones en cierto puerto, y cada vez que un cliente se conecte al servidor, entonces el servidor regresa ese mensaje a todos los clientes conectados.

Si deseas mantener un registro historico de todas las conversaciones, tienes que implementar un buffer en tu servidor, y cada vez que ese buffer se llena, vaciar los contenidos del buffer a la base de datos y empezar con un buffer completamente limpio.


Como programas ese servidor?
Puedes utilizar PHP con Sockets, Puedes utilizar Java o puedes utilizar nodejs si tienes ganas de un cambio total de paradigma ;)
  #7 (permalink)  
Antiguo 09/10/2013, 13:14
 
Fecha de Ingreso: noviembre-2010
Ubicación: Córdoba
Mensajes: 119
Antigüedad: 13 años, 5 meses
Puntos: 8
Respuesta: chat web

AlanChavez te ha detallado lo que yo te comentaba. La mejor no, la opción son socket y en tu caso socket PHP.
  #8 (permalink)  
Antiguo 12/10/2013, 19:10
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
Respuesta: chat web

Gracias por sus respuestas, con respecto a lo que me comentan de los socket voy a empezar a leer de un libro de c# que tengo una vez que lo entienda buscare la sintaxis para hacerlo en este lenguaje.


Gracias...
  #9 (permalink)  
Antiguo 12/10/2013, 21:38
Avatar de freddy31DA  
Fecha de Ingreso: junio-2012
Mensajes: 84
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: chat web

Cita:
Iniciado por kraneok Ver Mensaje
Error, no se debe utilizar la base de datos para un chat, busca otros métodos, que haberlo haylos.
Me gustaría saber por que dices que es un error utilizar bases de datos para un chat, cuales son las alternativas y donde almacenas la información si usas node.js o socket.io si usas archivos, en teoria la información se guardaría en una base de datos.
  #10 (permalink)  
Antiguo 16/10/2013, 06:20
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
Respuesta: chat web

Si no es recomendable usar base de datos para un chat entonces cual seria la mejor forma de guardar el historial?
  #11 (permalink)  
Antiguo 16/10/2013, 08:35
Avatar de iEnrique  
Fecha de Ingreso: abril-2013
Ubicación: España
Mensajes: 346
Antigüedad: 11 años
Puntos: 5
Respuesta: chat web

Cita:
Iniciado por AlanChavez Ver Mensaje
Si deseas mantener un registro historico de todas las conversaciones, tienes que implementar un buffer en tu servidor, y cada vez que ese buffer se llena, vaciar los contenidos del buffer a la base de datos y empezar con un buffer completamente limpio.
Te lo ha dicho antes Alan... que lo implementes en un buffer y cuando el buffer se llene lo metes en el servidor y ese buffer queda totalmente limpio para ser utilizado de nuevo.
  #12 (permalink)  
Antiguo 09/11/2013, 23:03
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
Respuesta: chat web

Disculpen, esta pregunta la hice ya hace un mes pero sigo con lo mismo :S

e leido sobre sockets... pero ahora como hago para implementar un buffer en php para luego limpiar dicho buffer y pasar la información a una base de datos?

Aparte una pregunta, las tablas temporales de mysql funcionan igual que las tablas no temporales?
es decir si hago que los mensajes lleguen a una tabla temporal de igual manera se insertaran los datos por usuario o si se podrán insertar datos de varios usuarios a la ves?

como me indica AlanChavez...

De ante mano gracias por sus respuestas.


Última edición por oscard41; 09/11/2013 a las 23:15
  #13 (permalink)  
Antiguo 10/11/2013, 21:51
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 11 años, 11 meses
Puntos: 8
Respuesta: chat web

y si en ves de usar sockets desarrollo un servicio web?

Etiquetas: chat, usuarios
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 10:27.