Foros del Web » Programación para mayores de 30 ;) » Java »

almacenar socket en la base de datos

Estas en el tema de almacenar socket en la base de datos en el foro de Java en Foros del Web. hola! es esto una burrada?? almacenar el socket en la base de datos??? necesito tenerlos almacenados para poder enviar en el sentido servidor-cliente, cuando sea ...
  #1 (permalink)  
Antiguo 04/07/2011, 01:30
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 8 meses
Puntos: 17
almacenar socket en la base de datos

hola! es esto una burrada?? almacenar el socket en la base de datos???

necesito tenerlos almacenados para poder enviar en el sentido servidor-cliente, cuando sea necesario, puesto que mi comunicación es bidireccional y asíncrona.

si no, ¿alguna idea de como hacerlo? Gracias!
  #2 (permalink)  
Antiguo 04/07/2011, 02:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: almacenar socket en la base de datos

buenas.

un socket no se almacena en base de datos. ¿quieres decir que quieres almacenar los datos que vas a enviar por el socket?.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 04/07/2011, 02:27
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 8 meses
Puntos: 17
Respuesta: almacenar socket en la base de datos

Si, suponía... a ver si alguien se le ocurre como... llevo todo el fin de semana dandole vueltas...

Tengo un servidor que acepta conexiones desde varios puntos, tanto cliente como servidor hablan cuando quieren, cuando habla cliente y responde el servidor perfecto.

Ahora el problema es cuando desde mi web (utilizo phpjava bridge), le digo que le hable "el cliente x", como puedo decirle el socket de todos los que tiene abiertos que debe hablarle?

Gracias!
  #4 (permalink)  
Antiguo 04/07/2011, 02:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: almacenar socket en la base de datos

En principio no puedes en un entorno web. En un entorno web se trabaja así : Cliente abre conexión con servidor, pide algo, servidor le contesta y se cierra conexión (aunque por motivos de eficiencia es posible que la conexión no se cierre realmente hasta transcurrido un tiempo razonable que el servidor y el cliente deciden a través del protocolo http).

Si lo que quieres es que varios clientes se enteren de algo que ha hecho otro cliente o de algo que ha pasado en el servidor, el mecanismo habitual es que el cliente pida esos datos periódicamente cada cierto tiempo (segundos o minutos, según la velocidad de refresco que se quiera).

Una forma algo más avanzada consiste en que el cliente pide algo y si no hay novedades, el servidor simplemente no le contesta, deja bloqueada la petición hasta que haya algo para enviar al cliente. De esta forma, si no hay datos, lo normal es que al cliente le salte un timeout que debe "capturar" para volver a pedir. Pero esta técnica quizás no es tan sencilla como la anterior, aunque sí más eficiente.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 04/07/2011, 05:19
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 8 meses
Puntos: 17
Respuesta: almacenar socket en la base de datos

Te cuento más o menos mi aplicación.

-La comunicación no se cierra (utilizo bucles para evitarlo) para aumentar la velocidad, que es crítica en mi caso, y como uso SSL el negociado de las claves es un problema en mi caso.

-Quiero poder mandar comandos a mis clientes (pero no es a todos, sólo a 1 cada vez), y no tiene porque ser mensaje-> respuesta, pueden ser 5 en un sentido y uno en otro o 32, 1 o...

-Tengo mensaje de KeepAlive cada 15 min, que podría ser mi solución, pero me gustaría que pudiera ser momentaneo.


Gracias!

Última edición por cucuru; 04/07/2011 a las 05:25
  #6 (permalink)  
Antiguo 05/07/2011, 00:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: almacenar socket en la base de datos

No sé qué estructura tienes montada, hablas de web y phpbridge. ¿dónde está el socket? ¿de quién contra quién?. Sí, del cliente al servidor, pero ... ¿el cliente es un ejecutable java tuyo o es un navegador? ¿el servidor es un servidor web estilo tomcat o también es un ejecutable tuyo?

En cualquier caso te adelanto que el socket no se puede guardar un socket en base de datos. Si dices que en el servidor tienes las conexiones abiertas y no las cierras, no debería ser difícil enviar el dato que quieras a quien quieras. Haz, por ejemplo, un Hash en el que la clave sea algo que identifique al cliente y guarda como dato el socket.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 05/07/2011, 01:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 8 meses
Puntos: 17
Respuesta: almacenar socket en la base de datos

Genial! lo había solucionado con el identificador de thread, pero no me terminaba de gustar esa solución, nunca he trabajado con Hash tables, voy a investigar!

Etiquetas: almacenar, 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:14.