Autor
|
Tema: Problema Java (Leído 9,803 veces)
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Never give up Lo que pasa que cada vez que el cliente (javascript en este caso) se conecta al servidor de Websockets, se crea una sesión nueva para ese cliente. Y cada vez que otro cliente ingresa es otra sesión nueva independiente de las demás. Por lo tanto todos mantienen una comunicación independiente, algo así como una conexión Punto a Punto. Lo que puedes hacer obtener todas las sesiones activas en el servidor, y ir mandando el mensaje a todas las sesiones abiertas. No utilices socket multicast porque seria complicarse mucho mas, y no obtendrías las ventajas, performance ni el nivel de abstracción que te ofrece Websockets. Y encimas tendrías que configurar puertos de los clientes y tener en cuenta que el firewall no bloquee esos puertos... Y para lo que deseas hacer no deberías utilizar socket multicast y tampoco no existe una api en javascript para recibir dichos mensajes. Tomando en cuenta que Websockets puede correr sobre HTTP por lo tanto no tendrás problema, prueba de eso es que pudiste establecer una comunicación cliente servidor sin mucho problema . Te dejo unos links que te podrían ayudar mucho en lo que te interesa hacer: http://stackoverflow.com/questions/18481597/how-to-get-an-existing-websocket-instanceEste ultimo link tomarlo de referencia. http://java.dzone.com/articles/creating-websocket-chatPD: Te recomiendo que te leas sobre la especificación de WebSocket de JavaEE 7, para que no tengas este tipo de problema. Ya que sabrás como funciona todo. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
luismi_12
Desconectado
Mensajes: 16
|
Ya he estado mirando esos ejemplos, pero como podria hacer para que se hiciera un broadcast cada vez que hay un onmensaje, si me puedierais ayudar por favor.
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
En el primer LINK, ponen un ejemplo compa. Te recomiendo que lo examines y dime que hace el trozo de código que acabo de poner copiado del link antes de volver a postear. public void broadcastArticle(@Observes @NewArticleEvent ArticleEvent articleEvent) { for (Session s : sessions) { if (s.isOpen()) { try { // send the article summary to all the connected clients s.getBasicRemote().sendText("New article up:" + articleEvent.getArticle().getSummary()); } } }
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
luismi_12
Desconectado
Mensajes: 16
|
Lo que hace es por cada sesion que hay abierta mandarles el articulo. Lo que pasa que si lo modifico en local para que mande lo recibe del formulario ya no me funciona.
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Lo que hace es por cada sesion que hay abierta mandarles el articulo. Lo que pasa que si lo modifico en local para que mande lo recibe del formulario ya no me funciona.
No entendí. Pero piensa porque no esta funcionando y piensa como haz programado todo, y llegaras a una conclusión.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
luismi_12
Desconectado
Mensajes: 16
|
Vale le seguire dando vueltas, pero ahora mismo lo tengo asi package com.apuntesdejava.websocket;
import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger;
import javax.ejb.EJB; import javax.websocket.OnClose; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/broadcast") public class MyEndpoint { // EJB that fires an event when a new article appears @EJB // a collection containing all the sessions private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen public void onOpen(final Session session) { sessions.add(session); }
@OnClose public void onClose(final Session session) { // remove the session from the set sessions.remove(session); } @OnMessage public void broadcastArticle(String message) { for (Session s : sessions) { if (s.isOpen()) { try { // send the article summary to all the connected clients s.getBasicRemote().sendText(message); } catch (IOException ex) { } } } } } Y el scrip asi <script type="text/javascript"> var wsUri = "ws://localhost:8080/Hlc/broadcast"; var websocket = new WebSocket(wsUri); //creamos el socket websocket.onopen = function(evt) { }; websocket.onmessage = function(evt) { document.getElementById("msgArea").textContent += message.data + "\n"; console.log(message.data); }; websocket.onerror = function(evt) { log("oho!.. error:" + evt.data); }; function log(mensaje) { //aqui mostrará el LOG de lo que está haciendo el WebSocket var logDiv = document.getElementById("log"); logDiv.innerHTML += (mensaje + '<br/>'); } function EnviarServidor() { websocket.send(document.getElementById("msg").value) document.getElementById("msg").value = ""; } </script>
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Lo acabo de probar el código y funciona con múltiple cliente.
Pero tuve que editar un poco el código Java para quitar cosas innecesarias y el cliente javascript tienen errores, uno de ellos es que nunca veras lo mensaje que el servidor envía al cliente...
Y la razón porque no te funciona y de tus problemas es que haz copiado código o trozos de código y me refiero mas al cliente en javascript. Y no sabes a nivel técnico 100% como funciona lo que haz hecho porque haz copiado y como no entiendes todo lo que tienes entonce no sabes donde y como solucionar el problema.
Así que ya sabes, a debuguear ese código javascript y dejar de copiar.
Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
luismi_12
Desconectado
Mensajes: 16
|
Me podrias decir, mas o menos por donde estan los errores, ya se que lo mejor es aprender por uno mismo pero ayer me revento la aplicacion donde usaba este codigo y llevo dos dias contando hoy, dando vueltas a por que no se contecta a la base de datos, digo si puedes, es que no voy muy sobrado de tiempo.
|
|
|
En línea
|
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Me podrias decir, mas o menos por donde estan los errores, ya se que lo mejor es aprender por uno mismo pero ayer me revento la aplicacion donde usaba este codigo y llevo dos dias contando hoy, dando vueltas a por que no se contecta a la base de datos, digo si puedes, es que no voy muy sobrado de tiempo.
Solo dos días? En el mundo de la programacion duras varios dias con un problema es normal. Y gracias a esos problemas es crecemos como programadores Cuando lo soluciones tu mismo, alcanzaras un nuevo nivel de programación!!! Y ese derecho no te lo pienso quitar.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
luismi_12
Desconectado
Mensajes: 16
|
Ya lo se, pero es que esto estaba completo, pero es parte de una aplicacion que debo entregar este lunes, me pegue dias investigando ya que no habia estudiado ni trabajado en la vida con websocket.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problema en java
Java
|
mitsumy
|
2
|
2,403
|
16 Enero 2007, 16:27 pm
por mitsumy
|
|
|
Problema con java
Java
|
ZeroneR
|
3
|
2,733
|
9 Noviembre 2008, 20:46 pm
por ZeroneR
|
|
|
Problema en Java
Java
|
Cooltan
|
0
|
1,782
|
31 Marzo 2011, 12:51 pm
por Cooltan
|
|
|
Problema con Java
Java
|
Tuplado
|
0
|
1,312
|
16 Octubre 2012, 00:16 am
por Tuplado
|
|
|
[Problema] Java 3D
Java
|
adeur
|
3
|
3,200
|
6 Febrero 2014, 00:18 am
por MidBifroid
|
|